使用 ASP.NET Core MVC 创建 Web API——响应数据的内容协商(七
原文:
使用 ASP.NET Core MVC 创建 Web API——响应数据的内容协商(七)
使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) ?使用 ASP.NET Core MVC 创建 Web API(三) 使用 ASP.NET Core MVC 创建 Web API(四) 使用 ASP.NET Core MVC 创建 Web API(五)使用 ASP.NET Core MVC 创建 Web API(六) ? ???? ASP.NET Core MVC 包含对通过固定格式或根据客户端规范来设置响应数据格式的内置支持。 ???? ASP.NET Web API的内容协商(Content Negotiation)机制的理想情况是这样的:客户端在请求头的Accept字段中指定什么样的MIME类型,Web API服务端就返回对应的MIME类型的内容(响应头的中Content-Type就是Accept中指定的MIME类型)。而现实情况是,Web API服务端能返回什么MIME类型的响应类型取决于有没有对应这个MIME类型的MediaTypeFormatter。ASP.NET Core Web API的默认提供JsonMediaTypeFormatter,如果要支持 XmlMediaTypeFormatter需要进行配置。 ?? ?? ASP.NET Core MVC 使用的默认格式是 JSON。 内容协商由 ????? 以下操作方法返回一个对象实例和 [HttpGet("{id}")] public async Task<ActionResult<Book>> GetBookItem(int id) { var bookItem = await _context.Book.FindAsync(id); if (bookItem == null) { return NotFound(); } return bookItem; } ??? 将返回 JSON 格式的响应,除非请求了另一个格式且服务器可以返回所请求格式。 可以使用 Rester工具创建包括 Accept 标头的请求并指定另一种格式。 在此情况下,如果服务器有可以生成所请求格式的响应的格式化程序,则结果会以服务器首选的格式返回。 ??? 1) 在Visual Studio 2017中按F5,启动BookApi应用程序。 ??? 2) 打开Firefox浏览器,并打开 Rester,在Reseter中,将 HTTP 方法设置为 ?? 3) 然后在URL输入框中输入要获取的对象URI,例如 ?? 4) 选择“Headers”选项卡,选择“ ??? 5) 使用鼠标点击“Send”按钮。请求将收到具有作书籍数据的“200 正常”响应。如下图。 ? ???? 6) 选择“Headers”选项卡,选择“ ???? 7) 使用鼠标点击“Send”按钮。请求将收到具有作书籍数据的“200 正常”响应。如下图。我们虽然指定 ? ????? 控制器操作可以返回 POCO(普通旧 CLR 对象),在这种情况下,ASP.NET Core MVC 将自动创建打包对象的 ??? 1) 在Visual Studio 2017中打开BookController.cs文件,添加以下 [HttpGet("{id}")] public Book GetBook(int id) { var bookItem = _context.Book.Find(id); return bookItem; } ???? 2)在Visual Studio 2017中按F5启动Web应用程序。 ??? 3) 打开浏览器,一并打开Rester。 ???? 4) 将 HTTP 方法设置为 ??? 5) 使用鼠标点击“Send”按钮。请求将收到具有作书籍数据的“200 正常”响应。如下图。 ?? 6) 请求无效将收到“204 无内容”响应。 如下图。 ? ??? 配置格式化程序?????? 如果应用程序需要支持默认 JSON 格式以外的其他格式,那么可以添加 NuGet 包并配置 MVC 来支持它们。输入和输出的格式化程序不同。输入格式化程序由模型绑定使用;输出格式化程序用来设置响应格式。 还可以配置自定义格式化程序。请求头的Accept中除非指定为application/xml或者application/json,否则指定其它任何MIME, ????? 添加 XML 格式支持????? 在Visual Studio 2017若要添加对 XML 格式的支持,请安装 ???? 1. 在Visual Studio 2017的菜单>工具>选项对话框中,选择“NuGet包管理器”中的常规,根据自己需要,设置默认包管理格式,如下图。 ???? 2. 在解决方案资源管理器中,右键单击“引用”,选择“管理 NuGet 程序包”,如下图。 ? ???? 3.将“nuget.org”选择为“包源”,选择“浏览”选项卡并搜索“ ? ????? 4.在Visual Studio 2017中打开Startup.cs文件,将 XmlSerializerFormatters 配置添加到 Startup类的ConfigureServices方法中。代码如下: public void ConfigureServices(IServiceCollection services) { services.AddDbContext<BookContext>(options => options.UseSqlServer(Configuration.GetConnectionString("BookContext"))); ????? 或者,可以仅添加输出格式化程序: services.AddMvc(options => { options.OutputFormatters.Add(new XmlSerializerOutputFormatter()); });
???? 1) 在Visual Studio 2017中按F5,启动BookApi应用程序。 ???? 2) 打开Firefox浏览器,并打开 Rester,在Reseter中,将 HTTP 方法设置为 ???? 3) 选择“Headers”选项卡,选择“ ???? 4) 使用鼠标左键,单击“SEND”按钮。 响应返回200,响应窗格显示 ? ???? 5) 选择“Headers”选项卡,选择“ ????? 6) 使用鼠标左键,单击“SEND”按钮。 响应返回200,响应窗格显示 ???? 内容协商过程????? 内容协商仅在 ???????? 如果 Accept 标头包含 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用xmlhttp的经典ASP页面可以发出JSON请求吗?
- asp.net核心 – ASP – 启动时核心迁移EF核心SQL DB
- entity-framework – 导航属性过滤器
- asp.net-mvc – 如何更好地控制DotNetOpenAuth如何使用Micr
- 调试 ASP.NET Core 2.0 源代码
- C#中try catch中throw ex和throw方式抛出异常有何不同_异常
- asp.net – IIS表达请求的执行时间要长4倍
- asp.net-mvc – MVC4中的ELMAH和API控制器不记录错误
- asp.net-mvc – 为什么在ASP.NET MVC中使用lambdas而不是反
- asp.net应用程序的最终用户是否需要安装.net