我有一个自定义模型绑定器,它从 MEF 容器中提取接口的实现。它的实现如下:
public class PetViewModelBinder : DefaultModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var petId = bindingContext.ValueProvider.GetValue("id");
var container = controllerContext.HttpContext.Application[MvcApplication.PLUGINS] as CompositionContainer;
Lazy<IPet, IPetMetadata> pet = null;
try
{
pet = container.GetExport(typeof(IPet), petId);
var petVM = new Models.PetViewModel(pet);
bindingContext.ModelMetadata.Model = petVM;
return base.BindModel(controllerContext, bindingContext);
}
catch (Exception)
{
throw;
}
finally
{
container.ReleaseExport(pet);
}
}
当 MEF 具有 petId 的导出时,这非常有效......但当导出不存在时返回 http 状态 500(服务器错误)。错误消息混淆要求指示应返回 http 状态 403(禁止)。
可以做些什么来捕获错误,更改响应状态,或者不返回内容,或者重新路由 Action 来处理这种情况?