当ID包含句点时,ApiController返回404
我有一个ApiController,我想使用电子邮件地址作为请求的ID参数:
// GET api/employees/email@address.com public CompactEmployee Get(string id) { var email = id; return GetEmployeeByEmail(email); }
但是,我不能得到这个工作(返回404 ):
http://localhost:1080/api/employees/employee@company.com
以下所有工作:
-
http://localhost:1080/api/employees/employee@company
-
http://localhost:1080/api/employees/employee@company.
-
http://localhost:1080/api/employees?id=employee@company.com
我在web.config中设置了relaxedUrlToFileSystemMapping="true"
, 详见Phil Haack 。
我会非常喜欢完整的电子邮件地址工作,但任何时间之后的任何其他字符,请求返回404。任何帮助将不胜感激!
解
由于缺less其他选项,我按照Maggie所build议的方向,使用这个问题的答案来创build一个重写规则,以便在URL中需要电子邮件时自动添加尾部斜线。
<system.webServer> .... <rewrite> <rules> <rule name="Add trailing slash" stopProcessing="true"> <match url="^(api/employees/.*\.[az]{2,4})$" /> <action type="Rewrite" url="{R:1}/" /> </rule> </rules> </rewrite> </system.webServer>
将为您的scheme添加一个尾随斜线工作?
http://localhost:33021/api/employees/employee@company.com/
检查你的IIS设置:
Home Directory -> Configuration
编辑.aspx
应用程序扩展,并确保设置Verify that file exists
closures。
UPDATE
我刚刚testing了一个默认的MVC4 Web API项目
url: http://localhost:10983/api/values/cool@email.com
在ValuesController
:
public string Get(string id) { return id; }
这是回应:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">cool@email.com</string>