繁体   English   中英

网址中的冒号(:)在asp.net中导致错误

[英]colon(:) in url causes error in asp.net

我正在创建一个webAPI,当我在请求字符串中包含冒号(:)时,

http:// localhost:49579 / api / mycontroller /

我收到此错误:

从客户端(:)检测到潜在的危险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.config中设置relaxedUrlToFileSystemMapping = true

<httpRuntime relaxedUrlToFileSystemMapping = "true" />

MSDN链接这里是上下文。

或者,更改此配置,然后选择返回相关的错误消息,或重定向它们或执行任何操作。

编辑:如果只想在请求字符串中使用单个方法冒号,则可以始终用[ValidateInput(false)]装饰该Action方法,如我的这个答案中更详细地解释。 这意味着您不需要在web.config中降级请求验证。

我会避免在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM