在 global.asax 中添加以下事件(或将代码添加到现有的 Application_BeginRequest 处理程序):
protected void Application_BeginRequest()
{
foreach (var type in ModelBinders.Binders.Keys)
{
System.Diagnostics.Trace.WriteLine(
String.Format("Binder for '{0}': '{1}'",
type.ToString(),
ModelBinders.Binders[type].ToString()));
}
}
然后您可以在 VS 输出窗口中检查当前注册了哪些活页夹。你可以看到这样的东西:
Binder for 'System.Web.HttpPostedFileBase': 'System.Web.Mvc.HttpPostedFileBaseModelBinder'
Binder for 'System.Byte[]': 'System.Web.Mvc.ByteArrayModelBinder'
Binder for 'System.Data.Linq.Binary': 'System.Web.Mvc.LinqBinaryModelBinder'
Binder for 'System.Threading.CancellationToken': 'System.Web.Mvc.CancellationTokenModelBinder'
您还可以检查是否有任何ModelBinderProvider
可以选择活页夹提供者,因为选择使用哪个模型活页夹的顺序如下:
动作参数的属性。请参阅ControllerActionInvoker 类的 GetParameterValue 方法
从 IModelBinderProvider 返回的 Binder。请参阅ModelBinderDictionary 类中的 GetBinder 方法
在 ModelBinders.Binders 字典中全局注册的 Binder。
[ModelBinder()]
在模型类型的属性中定义的 Binder 。
DefaultModelBinder。
使用类似的方法在 BeginRequest 事件中检查模型绑定器提供程序:
foreach (var binderprovider in ModelBinderProviders.BinderProviders)
{
System.Diagnostics.Trace.WriteLine(String.Format("Binder for '{0}'", binderprovider.ToString()));
}
此外,您可以尝试通过 nuget 添加Glimpse,因为其中一个选项卡提供了有关用于控制器操作中每个参数的模型绑定器的信息。
希望这将帮助您跟踪未使用模型绑定器的原因。