千家信息网

如何配置MvcOptions

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

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

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

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

FiltersModelBindersModelValidatorProvidersValidationExcludeFiltersValueProviderFactories

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

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

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

示例 属性 内容 类型 数据 处理 配置 字符 字符串 格式 模型 缓存 支持 输出 信息 引擎 时候 程序 视图 输入 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 互联网最新的科技有限公司 腾讯阿里互联网科技 北京互联网科技有限公司 北京互联网络科技有限公司 碳银互联网科技有限公司 互联网科技素材视频竖屏 互联网科技公司的市场部门 互联网和高科技公司 西藏七维空间互联网科技有限公司 移动互联网科技公司 米聚互联网科技南京有限公司排面 浙南科技城互联网大厦建设工程 迪庆互联网科技招生 黑云互联网科技有限公司 互联网科技年终奖 陕西云淼互联网科技公司 抖集互联网科技技术咨询 张家口科技产业互联网平台 科技信息时代互联网发展 天津市摩尔互联网科技 广东万易互联网科技有限公司惠州分公司 互联网科技开发公司 嘟嘟瓜互联网科技 迪茉互联网科技 海南购全球互联网科技 银川新华互联网科技学校联系电话 中天科技中国工业互联网 万物互联网智能科技 互联网领先科技成果宣传视频
0