当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 existsclosures。

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>