私はすぐにいくつかの理由で何かの理由でアクションフィルタと例外フィルタが実行されていなかったので、検証例外が起きていないので、すぐにApplication_Error()
を使って何かを起草しました。私は、任意のURLにリダイレクトする方法の例、また、同じコントローラに対して新しいActionResult
を実行する方法の例を含め
protected void Application_Error()
{
var lastError = Server.GetLastError() as HttpRequestValidationException;
if (lastError == null)
return;
MvcHandler mvcHandler = Context.CurrentHandler as MvcHandler;
if (mvcHandler == null)
return;
RequestContext requestContext = mvcHandler.RequestContext;
if (requestContext == null)
return;
Server.ClearError();
Response.Clear();
Response.TrySkipIisCustomErrors = true;
// pick one of the following two options, or maybe more?
RedirectToUrl(requestContext);
ExecuteActionResult(requestContext, ...);
}
void ExecuteActionResult(RequestContext requestContext, ActionResult result)
{
string controllerName = requestContext.RouteData.GetRequiredString("controller");
IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(requestContext, controllerName);
ControllerContext controllerContext = new ControllerContext(requestContext, (ControllerBase)controller);
result.ExecuteResult(controllerContext);
}
void RedirectToUrl(RequestContext requestContext)
{
requestContext.HttpContext.Server.TransferRequest($"~/Error/Something", false);
}
(それがまだ存在していない場合、あなたはGlobal.asax.cs
でこのメソッドを作成することができます)元の要求が実行されたことを示します。
おそらく、HTMLを許可する方が簡単ですが、入力値からマークアップを取り除くだけでしょうか? –
@TiesonT。 *たくさんのものがあります/この検証によって除外されるさまざまな攻撃 - ASP.Netよりも優れていると思っているのは素朴です。 – caesay
@caesayリクエストの検証を無効にすることはお勧めしません。 OPが使用しているモデルにAllowHtmlAttributeを追加し、入力をサニタイズすることをお勧めします。 –