我有一个名为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>
答案 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
<httpRuntime relaxedUrlToFileSystemMapping="true" />
菲尔·哈克德(Phil Haacked)有一个很棒的article更详细。