[英]colon(:) in url causes error in asp.net
我正在创建一个webAPI,当我在请求字符串中包含冒号(:)时,
我收到此错误:
从客户端(:)检测到潜在的危险Request.Path值。
[HttpException(0x80004005):从客户端(:)检测到潜在的Request.Path值。] System.Web.HttpRequest.ValidateInputIfRequiredByConfig()+9673044 System.Web.PipelineStepManager.ValidateHelper(HttpContext上下文)+53
我不打算在api的实际请求中包含特殊字符,但是如果某些不良用户在请求中输入特殊字符,则会导致错误。
问题:如何在API端处理此错误? 有什么办法吗? 还是我应该给开发人员有关此问题的注释?
注意:我没有控制将来要访问API的客户端的控件。 我正在使用Visual Studio 2012 for Web; .Net版本4.0; ASP.Net WebApi; 和C#; 我确实认为该代码对于我的情况不是必需的,Api可以工作,除了那些特定的特殊字符。 但是,如果您有其他意见,请告诉我您还需要了解什么。
另一个注意事项:我不是在尝试找到在URL中允许它的方法,我只是在寻找专门处理错误的方法。
我会避免在Web路径中使用“最终用户”表示形式的字符串。
如果您确实需要传递文本,则将其作为POST请求的参数传递会有所帮助。 对于任何字符串,此方法都可以正常使用
如果必须通过GET请求执行此操作,请注意一些附加的编码/解码逻辑,这些逻辑将帮助您克服Request.Path限制。 (这里我的意思是将原始字符串转换为某些url友好的字符串,并且在控制器端将url友好的字符串解码为原始字符串的逻辑)。 但老实说,我不相信这种方法,因为通过解码,您可能会得到一个字符串,将其作为url的一部分插入后会被误解。
如果您的文本是服务器上“字典”的输入,则比我将整数Id字段添加到实体的“字典”并使用实体ID作为web.API的参数多。
您可以实现ExceptionFilterAttribute。 例如:
public class HttpExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Exception is HttpException)
{
actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.BadRequest);
}
}
}
此属性可以在操作方法,控制器或全局上使用。 但是不要忘记在启动时注册此过滤器。 在此处可以找到更多详细信息: ASP.NET Web API中的异常处理 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.