千家信息网

如何配置MvcOptions

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本篇文章为大家展示了如何配置MvcOptions,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。程序模型处理 IApplicationModelConventi
千家信息网最后更新 2024年09月22日如何配置MvcOptions

本篇文章为大家展示了如何配置MvcOptions,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

程序模型处理 IApplicationModelConvention

MvcOptions的实例对象上,有一个ApplicationModelConventions属性(类型是:List),该属性IApplicationModelConvention类型的接口集合,用于处理应用模型ApplicationModel,该集合是在MVC程序启动的时候进行调用,所以在调用之前,我们可以对其进行修改或更新,比如,我们可以针对所有的Controller和Action在数据库中进行授权定义,在程序启动的时候读取数据授权信息,然后对应用模型ApplicationModel进行处理。 示例如下:

public class PermissionCheckApplicationModelConvention : IApplicationModelConvention{ public void Apply(ApplicationModel application) {  foreach (var controllerModel in application.Controllers)  {   var controllerType = controllerModel.ControllerType;   var controllerName = controllerModel.ControllerName;   controllerModel.Actions.ToList().ForEach(actionModel =>   {    var actionName = actionModel.ActionName;    var parameters = actionModel.Parameters;    // 根据判断条件,操作修改actionModel   });   // 根据判断条件,操作修改ControllerModel  } }}

视图引擎的管理ViewEngines

在MvcOptions的实例对象中,有一个ViewEngines属性用于保存系统的视图引擎集合,以便可以让我们实现自己的自定义视图引擎,示例如下:

services.AddMvc().Configure(options =>{ options.ViewEngines.Clear(); options.ViewEngines.Add(typeof(ThemeViewEngine));});

Web API中的输入(InputFormater)/输出(OutputFormater)

输入

Web API和目前的MVC的输入参数的处理,目前支持JSON和XML格式,具体的处理类分别如下:

JsonInputFormatterXmlDataContractSerializerInputFormatter

输出

在Web API中,默认的输出格式化器有如下四种:

HttpNoContentOutputFormatterStringOutputFormatterJsonOutputFormatterXmlDataContractSerializerOutputFormatter

上述四种在系统中,是根据不同的情形自动进行判断输出的,具体判断规则如下:

如果是如下类似的Action,则使用HttpNoContentOutputFormatter返回204,即NoContent。

public Task DoSomethingAsync(){ // 返回Task}public void DoSomething(){ // Void方法}public string GetString(){ return null; // 返回null}public List GetData(){ return null; // 返回null}

如果是如下方法,同样是返回字符串,只有返回类型是string的Action,才使用StringOutputFormatter返回字符串;返回类型是object的Action,则使用JsonOutputFormatter返回JSON类型的字符串数据。

public object GetData(){ return"The Data"; // 返回JSON}public string GetString(){ return"The Data"; // 返回字符串}

如果上述两种类型的Action都不是,则默认使用JsonOutputFormatter返回JSON数据,如果JsonOutputFormatter格式化器通过如下语句被删除了,那就会使用XmlDataContractSerializerOutputFormatter返回XML数据。

services.Configure(options => options.OutputFormatters.RemoveAll(formatter => formatter.Instance is JsonOutputFormatter));

当然,你也可以使用ProducesAttribute显示声明使用JsonOutputFormatter格式化器,示例如下。

public class Product2Controller : Controller{ [Produces("application/json")] //[Produces("application/xml")] public Product Detail(int id) {  return new Product() { ProductId = id, ProductName = "商品名称" }; }}

或者,可以在基类Controller上,也可以使用ProducesAttribute,示例如下:

[Produces("application/json")]public class JsonController : Controller { }public class HomeController : JsonController{ public List GetMeData() {  return GetDataFromSource(); }}

当然,也可以在全局范围内声明该ProducesAttribute,示例如下:

services.Configure(options => options.Filters.Add(newProducesAttribute("application/json")));

Output Cache 与 Profile

在MVC6中,OutputCache的特性由ResponseCacheAttribute类来支持,示例如下:

[ResponseCache(Duration = 100)]public IActionResult Index(){ return Content(DateTime.Now.ToString());}

上述示例表示,将该页面的内容在客户端缓存100秒,换句话说,就是在Response响应头header里添加一个Cache-Control头,并设置max-age=100。 该特性支持的属性列表如下:

属性名称描述
Duration缓存时间,单位:秒,示例:Cache-Control:max-age=100
NoStoretrue则设置Cache-Control:no-store
VaryByHeader设置Vary header头
Location缓存位置,如将Cache-Control设置为public, private或no-cache。

另外,ResponseCacheAttribute还支持一个CacheProfileName属性,以便可以读取全局设置的profile信息配置,进行缓存,示例如下:

[ResponseCache(CacheProfileName = "MyProfile")]public IActionResult Index(){ return Content(DateTime.Now.ToString());}public void ConfigureServices(IServiceCollection services){ services.Configure(options => {  options.CacheProfiles.Add("MyProfile",   new CacheProfile   {    Duration = 100   }); });}

通过向MvcOptionsCacheProfiles属性值添加一个名为MyProfile的个性设置,可以在所有的Action上都使用该配置信息。

其它我们已经很熟悉的内容

以下内容我们可能都已经非常熟悉了,因为在之前的MVC版本中都已经使用过了,这些内容均作为MvcOptions的属性而存在,具体功能列表如下(就不一一叙述了):

FiltersModelBindersModelValidatorProvidersValidationExcludeFiltersValueProviderFactories

另外两个:
MaxModelValidationErrors
置模型验证是显示的最大错误数量。

RespectBrowserAcceptHeader
在使用Web API的内容协定功能时,是否遵守Accept Header的定义,默认情况下当media type默认是*/*的时候是忽略Accept header的。如果设置为true,则不忽略。

上述内容就是如何配置MvcOptions,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

示例 属性 内容 类型 数据 处理 配置 字符 字符串 格式 模型 缓存 支持 输出 信息 引擎 时候 程序 视图 输入 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全指导原则范本 树莓派读数据库 支持中华文化数据库建设是 服务器怎么叫 软件测试和网络安全题库 阿坝软件开发厂家价格 软件开发行业增值税即征即退政策 网站数据库图片保存方案 服务器网络延迟高 山东定制软件开发公司有哪些 甘肃省网络安全审判庭揭牌牌 数据库备份技术 如何上传阿里云服务器 u31统一网关系统数据库序列号 软件开发与与应用是学的什么 中国数据库40年发展简史 一份网络安全手抄报图片 青岛手机软件开发学校 网络安全资产管理流程图 安卓软件开发首选 云趣科技 网络安全宣传员手抄报简单 网络安全法的信意义 嘉兴网站服务器怎么制作软件 安卓的软件开发多少钱 闵行区高科技软件开发应用范围 网络技术岗位说明书 网络技术应用试题库 奥林软件开发有限公司 浦东新区智能软件开发培训 服务器机盖怎么打开 hp
0