当我在表单中提交HTML字符时,为什么ASP.NET会抛出内部服务器(500)错误?

Row*_*man 5 vb.net asp.net validation asp.net-mvc character-encoding

当我把HTML字符在我的形式,例如<br />,如描述的ASP.NET抛出一个内部异常500 这里.

A potentially dangerous Request.Form value was detected from the client (Name="<br />").

好的,所以它保护我免受可能出于恶意原因使用的未编码字符的影响.

问题是,在我的长期搜索中无处可回答,该怎么办呢.即我的应用程序不应该只是在用户输入错误字符时抛出通用内部服务器错误(如果他们正在绘制诸如< - 的箭头,那该怎么办).

更好的是返回页面时出现ModelState错误,上面写着"请不要使用HTML字符"或有意义的内容.

但是如何实现呢?错误在它到达我的代码之前被抛出.此外,我不想只是通过它关闭它validateRequest="false",然后必须验证我的应用程序中的每个单独的HTML字符形式并返回错误.

有没有办法让这种类型的验证启用但只是以不同的方式处理它?

澄清代码:

Model

Public Class SomeModel
    Public Property SomeField As String
End Class
Run Code Online (Sandbox Code Playgroud)

Controller

<HttpPost>
Function SomeController(ByVal model As SomeModel)
    ' model.SomeField contains some HTML characters :O
    ' but it doesn't matter, since an internal error has occured :(
End Function
Run Code Online (Sandbox Code Playgroud)

nun*_*cal 2

绝对可以使用您认为合适的任何消息来显示您自己的错误页面。
为此,您可以使用自定义错误页面。

您可以将这些错误页面配置为显示适当的错误代码。

<configuration>
   <system.web>
      <customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" 
                    defaultRedirect="GenericError.htm">
         <error statusCode="500" redirect="InternalError.aspx"/>
      </customErrors>
   </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

显示自定义错误页面

在错误页面上,Server.GetLastError()如果您希望以不同方式处理这种情况的 html 数据,您可以检测最后一个错误并使用它显示适当的消息。