当ID包含句点时,ApiController返回404

时间:2012-11-08 21:58:43

标签: asp.net-mvc asp.net-web-api asp.net-mvc-routing

我有一个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"设置为detailed by Phil Haack

我非常喜欢完整的电子邮件地址,但是在任何其他角色跟着这段时间后,请求都会返回404.任何帮助都将非常感谢!

解决方案

由于缺少其他选项,我已朝着Maggie建议的方向前进,并使用this question的答案创建了一个重写规则,以便在我需要URL中的电子邮件时自动附加一个斜杠。

<system.webServer>
  ....   
  <rewrite>
    <rules>
      <rule name="Add trailing slash" stopProcessing="true">
        <match url="^(api/employees/.*\.[a-z]{2,4})$" />
        <action type="Rewrite" url="{R:1}/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

2 个答案:

答案 0 :(得分:75)

是否会为您的方案添加尾部斜杠?

http://localhost:33021/api/employees/employee@company.com/

答案 1 :(得分:1)

这对我有用:

我在targetFramework = 4.6.1上运行。我已经升级到4.6.2并将其添加到web.config中:

<system.web>
        <customErrors mode="Off"/>
        <compilation debug="true" targetFramework="4.6.2"/>
        <!-- This will allow to search for stuff that contains . & etc.-->
        <httpRuntime targetFramework="4.6.2" maxRequestLength="100000" maxUrlLength="2048" relaxedUrlToFileSystemMapping="true" requestPathInvalidCharacters=""/>
  </system.web>

requestPathInvalidCharacters=""应该能够以编码形式在URI中包含&等内容。