当前位置: 首页 > 编程语言 > C#

url中的冒号(-)导致asp.net出错share

时间:2023-04-11 01:33:10 C#

url中的冒号(:)导致asp.net出错:49579/api/mycontroller/:我收到此错误:从客户端(:)检测到潜在危险的Request.Path值。[HttpException(0x80004005):从客户端(:)检测到潜在危险的Request.Path值。]System.Web.HttpRequest.ValidateInputIfRequiredByConfig()+9673044System.Web.PipelineStepManager.ValidateHelper(HttpContextcontext)+53我不打算在api的实际请求中包含特殊字符,但是如果某些不良用户输入请求特殊字符,会报错。问题:如何在API端处理此错误?解决办法是什么?还是我应该就此问题向开发人员说明?注意:我无法控制未来将访问API的客户端。我正在使用VisualStudio2012forWeb;.Net版本4.0;ASP.NetWebApi;和C#;我认为代码对我来说是不必要的,除了那些特殊字符外,Api可以工作。但如果你不这么认为,请告诉我你还需要知道什么。另一个注意事项:我不是想找到一种方法在url中允许它,我只是想找到一种专门处理错误的方法。如果您真的想要允许它,请尝试在您的web.config中设置relaxedUrlToFileSystemMapping=true。此处的MSDN链接在上下文中。或者,更改此配置,并选择返回相关的错误消息,或重定向它们,或任何您想做的事情。编辑:如果您只想在单个方法的请求字符串中允许使用冒号,您始终可以使用[ValidateInput(false)]修饰该Action方法,如本答案中所述。这意味着您不需要在web.config中降级请求验证。您可以实施ExceptionFilterAttribute。例如:publicclassHttpExceptionFilterAttribute:ExceptionFilterAttribute{publicoverridevoidOnException(HttpActionExecutedContextactionExecutedContext){if(actionExecutedContext.ExceptionisHttpException){actionExecutedContext.Response=newHttpResponseMessage(HttpStatusCode.BadRequest);}}}此属性可用于操作方法,控制器或全局。但是不要忘记在启动时注册这个过滤器。可以在此处找到更多详细信息:ASP.NETWebAPI中的异常处理。我会在他们的“最终用户”表示中避免网络路径中的字符串。如果您确实需要传递文本,将其作为POST请求的参数传递会有所帮助。如果您必须通过GET请求执行此操作,此方法将确保任何字符串,请注意一些额外的编码/解码逻辑,以帮助您跨越Request.Path限制。(这里我指的是将原始字符串转换为一些友好的URL字符串并在控制器端将url友好字符串解码为原始字符串的逻辑)。但老实说,我不太喜欢这种方法,因为通过解码你会得到一个字符串,当它作为url的一部分插入时可能会被误解。如果您的文本是服务器上“字典”中的一个条目,那么我会在您实体的“字典”中添加一个整数Id字段,并将实体ID用作您的web.API的参数。以上是C#学习教程:url中冒号(:)导致asp.net出错分享全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络合集。不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: