+(加号)登录 Web API 路由

Posted

技术标签:

【中文标题】+(加号)登录 Web API 路由【英文标题】:+ (plus) sign in Web API routing 【发布时间】:2014-11-25 02:04:55 【问题描述】:

我正在处理一个 asp.net web api 项目,我必须通过一个帖子传递一个手机号码。但我不能返回加号。

我的路线:

config.Routes.MapHttpRoute( 
    name: "SmsRoute",
    routeTemplate: "rest/sms/country/company/phone/mobilenumber",
    defaults: new  controller = "Sms", action = "PostSms" );

控制器:

public HttpResponseMessage PostSms(string country, string company, string mobilenumber)

    return Request.CreateResponse( HttpStatusCode.Created );

当我在 fiddler 上运行这个 post 方法时:

http://index.html/rest/sms/se/company/phone/46700101010/messages/out

我收到了这样的回复:

但我希望它能够显示加号。

【问题讨论】:

【参考方案1】:

IIS 防止加号出现在 URL 路径元素中。

要禁用此功能,请在web.config

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true" />
    </security>
</system.webServer>

【讨论】:

【参考方案2】:

这是我们在 url 中添加参数时遇到的常见异常。在这里,您可以了解您的 OP 是什么以及您以后运行时可能需要什么

对于+,您可以有很多选项,您可以使用在您的 java 脚本文件中进行编码

encodeURIComponent();

如果你想在你的网址中添加任何特殊字符,比如.,那么为了你的方便,只需在你的 web.config 中设置属性relaxedUrlToFileSystemMapping

<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true" />

或者您可以在web.config 中添加或删除一些字符以阻止/允许使用requestPathInvalidCharacters

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?"/>

【讨论】:

这是一个 WebAPI 问题。 relaxedUrlToFileSystemMapping禁止的字符列表为&lt;, &gt;, :, ", /, \, |, ? and *requestPathInvalidCharacters 的默认值为&lt;, &gt;, *, %, &amp;, :, \, ?。据我所知,这些都对加号没有任何影响。【参考方案3】:

编码+:

用这个替换你的 feedle 输入:

http://index.html/rest/sms/se/company/phone/%2B46700101010/messages/out

另见:AJAX POST and Plus Sign ( + ) -- How to Encode?

http://www.google.com/search?q=foo%2Bbar

【讨论】:

感谢提示,但不是编码 当你使用给定的例子时会发生什么? 编码在查询字符串中起作用,但在 URL 路径组件中不起作用。

以上是关于+(加号)登录 Web API 路由的主要内容,如果未能解决你的问题,请参考以下文章

通过 api.php 的路由返回未经授权,而通过 web.php 的相同路由有效

小米路由器远程登录WEB页面

Web API Post 方法 frombody 为空

怎么用telnet修改路由器WEB端口

仅允许经过身份验证的用户访问 API 路由

登陆路由器192.168.0.1输入密码后,没有web界面是怎么回事?