相关文章推荐
稳重的芹菜  ·  ​ Spring ...·  1 月前    · 
慈祥的苹果  ·  .NET CORE(C#) WPF ...·  1 年前    · 

教程:使用 ASP.NET Core 创建 Web API
操作返回类型(ASP.NET Core Web API 中控制器操作的返回类型)
响应数据格式(ASP.NET Core Web API 中响应数据的格式)
Web API 2 的操作结果
创建数据传输对象 (DTO)
async 和 ASP.NET MVC
*
*
1、IHttpActionResult => json()
Json(T content)
Ok()
Ok(T content)
NotFound()
Content(HttpStatusCode statusCode, T value)
BadRequest()
Redirect(string location)

[HttpGet]
public IHttpActionResult GetAllGrade()
    var result = Mapper.Map<List<GradeDto>>(_gradeRepo.GetList(x => x.Status != "D"));
    return Json(result);

2、HttpResponseMessage 直接转换成HTTP响应消息

public HttpResponseMessage Get()
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode .OK, "hello");
    response.Content = new StringContent ( "hello wep api", Encoding .Unicode);
    response.Headers.CacheControl = new CacheControlHeaderValue
        MaxAge = TimeSpan .FromSeconds(600)
    return response;
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    var response = new HttpResponseMessage()
        Content = new StringContent(_value),
        RequestMessage = _request
    return Task.FromResult(response);

*
3、其它类型
将序列化后的返回值写入响应的正文(Response Body),并且返回 HTTP 状态码 200(OK)
*
*
4、async Task

// GET api/Books/5
[ResponseType(typeof(BookDetailDTO))]
public async Task<IHttpActionResult> GetBook(int id)
    var book = await db.Books.Include(b => b.Author).Select(b =>
        new BookDetailDTO()
            Id = b.Id,
            Title = b.Title,
            Year = b.Year,
            Price = b.Price,
            AuthorName = b.Author.Name,
            Genre = b.Genre
        }).SingleOrDefaultAsync(b => b.Id == id);
    if (book == null)
        return NotFound();
    return Ok(book);
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    var response = new HttpResponseMessage()
        Content = new StringContent(_value),
        RequestMessage = _request
    return Task.FromResult(response);

*
asp.net mvc

public async Task<ActionResult> Index()
    var departments = db.Departments.Include(d => d.Administrator);
    return View(await departments.ToListAsync());
public async Task<ActionResult> Details(int? id)
    if (id == null)
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    Department department = await db.Departments.FindAsync(id);
    if (department == null)
        return HttpNotFound();
    return View(department);

*
*
*
5、ASP.NET Core 提供以下 Web API 控制器操作返回类型选项
● 特定类型:如 string,自定义对象类型, IEnumerable<T>,IAsyncEnumerable<T>
● IActionResult:当操作中可能有多个 ActionResult 返回类型时,适合使用 IActionResult 返回类型
● ActionResult<T>
*
*
-------------------------------------ASP.NET Core-------------------------------------
特定类型:最简单的操作返回基元或复杂数据类型(如 string 或自定义对象类型)
操作均为非阻止性:返回 IEnumerable<T> 或 IAsyncEnumerable<T>,自 ASP.NET Core 3.0 起,前面两个操作均为非阻止性。
IActionResult: BadRequestResult (400)、NotFoundResult (404) 和 OkObjectResult (200)。 
ActionResult<T>
同步操作
异步操作:  
*
ControllerBase 类  
下面是 ControllerBase 提供的方法的更多示例

*
绑定源参数推理  

*
*
*
*
*
7*
*
*
8、
*
0、

利用自定义IHttpControllerSelector实现WebAPI版本控制, 重载GetControllerMapping(),GetControllerMapping()用于返回程序集中所有Control的名字和描述关系。用于获取所有继承自ApiController的非抽象类。 利用正则表达式获取NameSpace中的版本号、控制器名称并生成key。 重载SelectController()方法,请求时调用SelectController()方法并返回一个Controller处理请求,从路由(请求路径)数据中获取Controller和版本号生成key ,根据key从键集合中返回Control。 2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。对参数的数据类型,GET只接受ASCII字符,而POST没有限制。GET请求在URL中传送的参数是有长度限制的,而POST么有。 在很多项目中,因为webapi是对外开放的,这个时候,我们就要得考虑接口交换数据的安全性。 安全机制也比较多,如andriod与webapi 交换数据的时候,可以走双向证书方法,但是开发成本比较大, 今天我们不打算介绍这方面的知识,我们说说一个较简单也较常见的安全交换机制 在这里要提醒读者,目前所有的加密机制都不是绝对的安全! 我们的目标是,任何用户或者软件获取到我们的webapi接口url后用来再次访问该地址都是无效的! 达到这种目标的话,我们必须要在url中增加一个时间戳,但是仅仅如此还是不够,用户可以修改我们的时间戳! 因此我们可以对时间戳 进行MD5加密,但是这样依然不够,用户可以直接 Asp.Net Core 响应结果中默认返回为IActionResult,我们可以再Action返回简单字符串、实体对象、视图等多种数据,这些结果都被封装在IActionResult中,对于不同的返回结果 mvc框架提供了多种类型结果实现了此接口。 下表中列出了不同返回类型返回结果 前言:已经有一个月没写点什么了,感觉心里空落落的。今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧。之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解 ,这篇博文内容本身很基础,没想到引起很多园友关注,感谢大家的支持。作为程序猿,我们都知道参数和返回是编程领域不可分割的两大块,此前分享了下WebApi的传参机制,今天再来看看WebApi里面另一个重... HttpMessageNotReadableException: Required request body is missing 1.2 浏览器报错 “status“: 400, “error“: “Bad Request“ 2. 原因 当前端使用Get请求方式发送含参请求时,后端Controller接收参数时不同使用@RequesrBody注解。而应该使用如下方式: @GetMapping("/info") @ApiOperation("通过用户toke 最近在为自己所在的演讲俱乐部开发一个小程序,后端是用.NET CORE 来实现,今天遇到了一个奇怪的问题,一直报400 bad request请求错误。 前端代码: let url = behavior=='like'?'like':'like/cancel'; this.request({ url:url, method:'POST', data:{ id:likeid WebApi程序可在方法参数前加[FromBody]标识,表示该参数应该从请求的Body中获取,而不是从URL中获取。 从URL获取参数的方式的弊端是URL有长度限制,当超过浏览器的最大URL长度时请求将被浏览器拒绝,根本不会发出去。 因此,当参数过大时需要用[FromBody]参数进行传输。 以下是WebApi接口定义,很简单,只为说明用法: [HttpPo (给DotNet加星标,提升.Net技能)转自:FlyLolocnblogs.com/FlyLolo/p/11503207.html本章讲一下它的"逆过程",如何将请求结果按照客户端想要的格式返回去。一、常见的返回类型以系统模板默认生成的Home/Index这个Action来说,为什么当请求它的时候会返回一个Html页面呢?除了这之外,还有JSON、文本等类型,系统是如何处理这些不同的类... ControllerBase类 ControllerBase针对Web Api,而Controller针对Web View,除非一个Controller同时需要Web ApiWeb View ApiController 属性 1.属性路由要求 2.自动HTTP 400响应 3.绑定源参数推理 4.Multipart/form-data 请求推理 5.错误状态代码的问题详细信...