如何在uri C#WEB API 2中处理带空格和斜杠的参数

时间:2015-10-06 19:12:56

标签: c# asp.net-web-api asp.net-web-api-routing

我有一个名为Test Controller的控制器,方法名称为Test 测试方法接受一个参数。但是当参数包含具有空格斜杠的值时,web api会给出错误。我正在使用WEB API 2。

[Route("Test/{companyName}")]
[AcceptVerbs("GET", "POST")]
[System.Web.HHttpGet]

public HttpResponseMessage Test(string companyName)
{
}

参数值为BTL / Force Motor Ltd.

我试过但没有发生任何事情。

<uri>
  <schemeSettings>
    <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
  </schemeSettings>
</uri>

2 个答案:

答案 0 :(得分:3)

您需要对您发送到API的值进行编码,如下所示:

http://yourApiDomainName/api/yourControllerName/?companyName=BTL%20%2F%20Force%20Motor%20Ltd

URL编码时的

[SPACE]:%20

URL编码的

[Forward Slash]变为:%2F

您不需要对控制器中的值进行http解码,因为这些值一旦到达您的控制器就会被框架解码。所以你会看到&#39; BTL%20%2F%20Force%20Motor%20Ltd&#39;作为&#39; BTL / Force Motor Ltd&#39;在你的控制器内。

有关URL编码的完整列表,请参阅: http://www.w3schools.com/tags/ref_urlencode.asp

答案 1 :(得分:0)

您的问题与WebAPI本身无关,但ASP.Net如何处理某些特定的Urls。这也可能会影响传入API的任何点(“。”)。这对我有用:

将此行添加到system.web

下的web.config中
<httpRuntime relaxedUrlToFileSystemMapping="true" />
菲尔·哈克德(Phil Haacked)有一个很棒的article更详细。