当前位置: 首页 > news >正文

最好的扁平化网站上海网页设计

最好的扁平化网站,上海网页设计,广东深圳今天最新通知,实时热点新闻事件2021什么是响应结果响应结果就是#xff0c;在客户端向服务器发出请求后#xff0c;服务器根据客户端的请求参数#xff0c;给出的结果#xff0c;这就是一个完整的响应结果过程。响应的结果包含的内容非常多#xff0c;主要的有 HTTP Status Code#xff0c;Content-Type,Co… 什么是响应结果响应结果就是在客户端向服务器发出请求后服务器根据客户端的请求参数给出的结果这就是一个完整的响应结果过程。响应的结果包含的内容非常多主要的有 HTTP Status CodeContent-Type,Content 等等在这里不再一一赘述。一般情况下在 .NET MVC 中如果是 API 接口默认使用 JsonOutputFormatter 对结果进行格式化。但是也不排除某些情况下我们需要对业务进行兼容化的设置比如部分接口使用 xml部分接口使用自定义的格式需求的响应是第一要务。常见响应结果格式化器在 .NET介于官方改名咱也不叫 Core 了哈 MVC中有几种内置的常见响应结果格式化器他们分别是0、OutputFormatter基类 1、TextOutputFormatter基类 2、StringOutputFormatter 3、StreamOutputFormatter 4、JsonOutputFormatter 5、XmlSerializerOutputFormatter 由于这几种常见的格式化器的存在我们可以放心的在 .NET MVC 中使用 请求- 响应 过程而不必关心他具体的实现。来自天气预报的示例默认的响应结果格式jsonprivate static readonly string[] Summaries new[] { Freezing, Bracing, Chilly, Cool, Mild, Warm, Balmy, Hot, Sweltering, Scorching }; private IEnumerableWeatherForecast GetWeatherForecast() { var rng new Random(); return Enumerable.Range(1, 3).Select(index new WeatherForecast{Date DateTime.Now.AddDays(index),TemperatureC rng.Next(-20, 55),Summary Summaries[rng.Next(Summaries.Length)]}).ToArray(); } [HttpGet] public IEnumerableWeatherForecast Get() { return GetWeatherForecast(); } 当我们请求上面的 API 接口将得到下面的默认输出结果。[{ date: 2020-10-24T17:19:05.463858808:00, temperatureC: 2, temperatureF: 35, summary: Cool},{ date: 2020-10-25T17:19:05.46460208:00, temperatureC: 18, temperatureF: 64, summary: Sweltering},{ date: 2020-10-26T17:19:05.464605708:00, temperatureC: -14, temperatureF: 7, summary: Mild} ] 这很好是我们想要的结果。Xml响应结果格式器在上面的天气预报示例中API接口默认使用了 json 格式输出响应结果。在不改动业务代码的情况下我们可以增加一种 xml 输出结果具体做法就是增加一个 API 接口然后在 startup.cs 中添加 xml 格式化器。[Produces(application/xml)] [HttpGet(xml)] public IEnumerableWeatherForecast Xml() { return GetWeatherForecast(); } 配置 Xml 格式器 XmlDataContractSerializerOutputFormatterpublic void ConfigureServices(IServiceCollection services) {services.AddControllers(configure {configure.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());}); } 这个时候再请求 API 地址/weatherforecast/xml 我们将会得到的结果如下ArrayOfWeatherForecast xmlns:ihttp://www.w3.org/2001/XMLSchema-instance xmlnshttp://schemas.datacontract.org/2004/07/CustomBinder WeatherForecast Date2020-10-24T17:24:19.104711608:00/Date SummaryScorching/Summary TemperatureC49/TemperatureC /WeatherForecast WeatherForecast Date2020-10-25T17:24:19.104721908:00/Date SummaryCool/Summary TemperatureC6/TemperatureC /WeatherForecast WeatherForecast Date2020-10-26T17:24:19.104722108:00/Date SummaryFreezing/Summary TemperatureC-20/TemperatureC /WeatherForecast /ArrayOfWeatherForecast ProducesAttribute 特性(内容协定API 接口 /xml 的特性标注多了一个 [Produces(application/xml)]正是得益于 ProducesAttribute 特性我们可以在 MVC 框架内随意的定制响应结果。ProducesAttribute 和其它的特性类没有太多的区别其基本原理就是使用用户指定的 contentType 参数本例中为 application/xml) 到 OutputFormatters 中查找对应类型的 Formatters。如果找到了就使用该 Formatters 格式化响应结果如果没有找到就抛出 No output formatter was found for content types 的警告同时客户端会收到一个  406(Not Acceptable) 的响应结果。我想要更多-自定义格式化器没错上面的几种常见的格式化器虽然非常好用。但是我现在要对接一个旧的第三方客户端该客户端采用的是 url 参数请求协议包很明显由于这个客户端过于年长假装找不到维护人员只能在服务器端进行兼容了。不过也不用过于担心开发一个自定义的格式化器还是非常简单的。我们只需要定义一个继承自 TextOutputFormatter 的子类即可其中有小部分需要编写的代码。需求我们接到的需求是兼容 url 方式的请求参数响应结果经过调研确认格式如下keyvaluekeyvaluekeyvalue 需求调研清楚后编码的速度就得跟上了定义格式化器 WeatherOutputFormatterpublic class WeatherOutputFormatter : TextOutputFormatter { private readonly static Type WeatherForecastType typeof(WeatherForecast); public WeatherOutputFormatter(){SupportedEncodings.Add(Encoding.UTF8);SupportedEncodings.Add(Encoding.Unicode);SupportedMediaTypes.Add(text/weather);} public override bool CanWriteResult(OutputFormatterCanWriteContext context){ if (context null){ throw new ArgumentNullException(nameof(context));} if (context.ObjectType WeatherForecastType || context.Object is WeatherForecast || context.ObjectType.GenericTypeArguments[0] WeatherForecastType){ return base.CanWriteResult(context);} return false;} private string WriterText(IEnumerableWeatherForecast weathers){StringBuilder builder new StringBuilder(); foreach (var wealther in weathers){builder.Append(WriterText(wealther));} return builder.ToString();} private string WriterText(WeatherForecast weather) $date{WebUtility.UrlEncode(weather.Date.ToString())}temperatureC{weather.TemperatureC}temperatureF{weather.TemperatureF}summary{WebUtility.UrlEncode(weather.Summary)}; public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding){ if (context null){ throw new ArgumentNullException(nameof(context));} if (selectedEncoding null){ throw new ArgumentNullException(nameof(selectedEncoding));} string text string.Empty; if (context.ObjectType WeatherForecastType)text WriterText(context.Object as WeatherForecast); else if (context.ObjectType.GenericTypeArguments[0] WeatherForecastType)text WriterText(context.Object as IEnumerableWeatherForecast); if (string.IsNullOrEmpty(text)){ await Task.CompletedTask;} var response context.HttpContext.Response; await response.WriteAsync(text, selectedEncoding);} } 正所谓一图胜千言所以我给大家画了一张图方便理解从图中可以看出我们只需要重写两个方法同时编写一个自定义格式化逻辑即可完成,看起来还是非常简单的。细心的同学可能发现了在 WriterText 方法中考虑到兼容性的问题我们还将 url 中的 value 进行转义可以说还是非常贴心的哈。编写测试方法[Produces(text/weather)] [HttpGet(weather)] public IEnumerableWeatherForecast Weather() { return GetWeatherForecast(); } 测试方法中定义 Produces(text/weather)指定需要的 ContentType同时还需要将 WeatherOutputFormatter 添加到 OutputFormatters 中使用。public void ConfigureServices(IServiceCollection services) {services.AddControllers(configure {configure.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());configure.OutputFormatters.Add(new WeatherOutputFormatter());}); } 调用接口进行测试请求 API 地址 /weather得到结果如下date2020%2F10%2F2710%3A35%3A36temperatureC42temperatureF107summaryScorchingdate2020%2F10%2F2810%3A35%3A36temperatureC28temperatureF82summaryFreezingdate2020%2F10%2F2910%3A35%3A36temperatureC17temperatureF62summarySweltering 结束语至此自定义格式化器已经完成本文通过一个简单的示例实现帮助大家理解如何在 MVC 中使用自定义格式化器文章篇幅不长做图花了点心思欢迎您的关注。示例代码托管在https://github.com/lianggx/EasyAspNetCoreDemo/tree/master/CustomBinder
http://www.huolong8.cn/news/232728/

相关文章:

  • 杭州本地网站有哪些网站2019建设目标
  • 360怎么变成建设银行首选网站常州网站建设企业网站
  • ppt模板网站排行淮北网站建设制作
  • 中国建设银行网站类型分析移动页面
  • 惠州外贸网站建设公司2016年做网站能赚钱
  • 网站架构是什么意思小程序原生开发
  • 做平面设计在什么网站能挣钱有没有永久免费的服务器
  • 视频网站用什么做的好处阳朔到桂林高铁
  • 网站开发工程师ppt上海装修公司排名前十强是哪十家
  • 建设电子商务系统网站基于jsp的网站开发的文献
  • 网站开发是固定资产吗wordpress分享视频
  • 企业营销型网站建设规划开发平台软件要多少钱
  • 深圳建站公司哪个济南兴田德润简介站长工具查询网
  • wordpress增加主题配置百度seo排名优化系统
  • 学做网站游戏教程网站没有备案怎么做淘宝客
  • 做网站做的宁波建设局网站
  • 网站做外链的技巧wordpress 安装后梅花
  • 设计外贸商城网站建设浙江省建设质量工程协会网站
  • 北京房产网站大全无锡抖音代运营公司
  • 惠州网站seo2023全国企业公司大黄页
  • 企业网站flash如何引流客源最快的方法
  • 网站建设项目数网站的内链怎么做
  • 微信网站怎么做的好处苏州搜狗关键词优化
  • 华安网站建设wordpress社交分享非插件
  • 怀柔石家庄网站建设百度问答怎么赚钱
  • 成都产品网站建设国外好的网站空间
  • 手机棋牌网站大全抖音短视频推广
  • 深圳做网站排名赣州
  • 一个专业做设计的网站网站建设需要照片吗
  • 网站的页面工艺品商城网站建设