zoukankan      html  css  js  c++  java
  • c# webapi 自定义返回数据

    前言

    webapi呢,我们创建的时候我给我们5个方法:get get(data)put post delete。

    很明显,get,get(data)是用来获取,post用来修改数据的,put,delete用的比较少了,我习惯性用ajax,每接触webapi的时候很少delete和put,后来用的用的觉得还是要知道这四个不同的东西。

    经过一查发现是http协议,既然是一种协议操作还是自己操作的,比如说传来4,5两个数,你相加还是相减还不是自己决定的?越来越多的程序员会去区分get,post,因为两者必须要清楚,

    所以这就造成一个现象mvc可能不支持put,和delete,可能会报405错误,还有一点需要说明,delete不要去传数据,它是一种链接提交方式,然后还需要一点修改支持。

    正文

    webapi 返回函数有下面几种:

    void();返回空。

    json(content);json对象

    这里我说明一下,有些人认为返回一个序列化的string和json他们不是最终传输的都是string吗,为何前台用ajax得到的一个是string一个是json,如果有着这样的疑问相信手写一遍ajax就没有疑问了,后面我会讲到。

    ok和 ok(content)

    Content(HttpStatusCode statusCode, T value) 自定义属性和返回类型

    BadRequest() 返回400;

    Redirect(string location) 重定向

    还有自定义的IHttpactionResult;

    说说原理吧 ,我所以把IHttpactionResult放到最后面是因为除了void(),其他都实现IHttpactionResult。

    为什么是这样呢,因为http协议是有规范的,要有头吧,要有身体吧,所以webapi就封装了这样一个接口供大家去实现你对应的规范,上面这些只是webapi帮你封装好了的。

    在下就示例一个它是怎么写的吧:

    public class PageResult: ApiController,IHttpActionResult
    {
      object _value;
      HttpRequestMessage _request;
      HttpStatusCode _code;
      public PageResult(T value, HttpStatusCode code)
      {
    	_request = Request;
    	_value = value;
    	_code = code;
    	//_request = request;
     }
    
      public Task ExecuteAsync(CancellationToken cancellationToken)
      {
    	var response = new HttpResponseMessage()
    	{
    		Content = new ObjectContent(typeof(object), _value, new JsonMediaTypeFormatter()),
    		RequestMessage = _request,
    		StatusCode=_code	
    	};
    	return Task.FromResult(response);
      }
    }
    

    这样就自己实现了返回对象了,总的来说就是符合http协议即可。

    差点忘记了,前面说的ajax,返回stirng类型和json类型,其实就是得到了头部的类型然后自己去转换的,不是说http传来的是json对象,http传的一定是个字符串,而不会是一个json对象,其中封装了获取类型对象,然后判断,转换,调用回调函数。

  • 相关阅读:
    陶瓷电容的结构、工艺、失效模式
    Vue.js最佳实践
    Vue 超快速学习
    CSS 小技巧
    HTML5 Canvas
    webkit下面的CSS设置滚动条
    Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them
    JSCS: Please specify path to 'JSCS' package
    React中ref的使用方法
    React 60S倒计时
  • 原文地址:https://www.cnblogs.com/aoximin/p/13130426.html
Copyright © 2011-2022 走看看