如果收到的请求是BadRequest,我有一个逻辑可以应用,为此我创建了一个过滤器:
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
// Apply logic
}
}
}
在启动中:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options => { options.Filters.Add<ValidateModelAttribute>(); });
}
控制器:
[Route("api/[controller]")]
[ApiController]
public class VerifyController : ControllerBase
{
[Route("test")]
[HttpPost]
[ValidateModel]
public ActionResult<Guid> validationTest(PersonalInfo personalInfo)
{
return null;
}
}
模型:
public class PersonalInfo
{
public string FirstName { get; set; }
[RegularExpression("\\d{4}-?\\d{2}-?\\d{2}", ErrorMessage = "Date must be properly formatted according to ISO 8601")]
public string BirthDate { get; set; }
}
事情是当我在断点上放一个断点时:
if (!context.ModelState.IsValid)
仅当我发送的请求有效时,执行才会到达此行。如果我发送了错误的请求,为什么它没有通过过滤器?
参考方案
您要应用于控制器的[ApiController]
属性将“自动HTTP 400响应”添加到MVC管道,这意味着如果ModelState
无效,则不会执行自定义过滤器和操作。您可以选择几种方法来影响其工作方式:
1.删除[ApiController]
属性
尽管您仅可以删除[ApiController]
属性,但这也会导致其提供的某些其他功能(例如“绑定源参数推断”)丢失。
2.仅禁用自动HTTP 400响应
这是docs中的示例,显示了如何仅禁用此功能:
services.Configure<ApiBehaviorOptions>(options =>
{
// ...
options.SuppressModelStateInvalidFilter = true;
});
此代码位于Startup
的ConfigureServices
方法中。
3.定制生成的自动响应
如果只想向调用方提供自定义响应,则可以自定义返回的内容。我已经在另一个答案here中描述了它是如何工作的。
ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…
如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…
ddl在服务器中未更新-asp.net - javascript我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……
在ASP.NET Core 2.1中添加自定义TagHelpers - c#我严格按照ASP.NET Core文档进行操作,并花费了大量时间来拖曳堆栈溢出,试图实现简单的自定义TagHelper,但没有成功。任何人都可以就任何陷阱或已知错误提出建议吗?应用程序属性:AssemblyName: AmpWeb Target Framework .NET Core 2.1 NuGet软件包Microsoft.AspNetCore.All …
asp.net mvc或javascript将另一页的结果返回给方法 - c#是否可以将另一个页面的结果返回给JavaScript方法或C#控制器操作?我有一个共享的复杂页面,该页面在我的网站上遍布使用,当前用于在C#后端的用户数据上设置单个变量。当用户完成共享的复杂页面后,我将返回引用页面。当用户在刷新或返回时将其作为url参数传递给返回的页面时,我返回的页面包含新选择的变量。我有一个新页面,我希望从我的共享复杂页面中返回该变量。但…