解读ASP.NET 5 & MVC6系列教程(15):MvcOptions配置

2019-05-22 14:44:59王旭

程序模型处理 IApplicationModelConvention

MvcOptions的实例对象上,有一个ApplicationModelConventions属性(类型是:List<IApplicationModelConvention>),该属性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属性用于保存系统的视图引擎集合,以便可以让我们实现自己的自定义视图引擎,比如在《自定义View视图文件查找逻辑》章节中,我们就利用了该特性,来实现了自己的自定义视图引擎,示例如下:

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

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

输入

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

JsonInputFormatter
XmlDataContractSerializerInputFormatter

输出

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

HttpNoContentOutputFormatter
StringOutputFormatter
JsonOutputFormatter
XmlDataContractSerializerOutputFormatter

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

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

public Task DoSomethingAsync()
{
 // 返回Task
}

public void DoSomething()
{
 // Void方法
}

public string GetString()
{
 return null; // 返回null
}

public List<Data> GetData()
{
 return null; // 返回null
}

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