59

私は 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

Phil HaackrelaxedUrlToFileSystemMapping="true"の詳細に従って web.config に設定しました。

完全な電子メールアドレスが機能することを非常に望んでいますが、ピリオドの後に他の文字が続くと、要求は常に 404 を返します。

解決

他のオプションがないため、マギーが提案した方向に向かい、この質問の回答を使用して、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>
4

3 に答える 3

84

末尾にスラッシュを追加すると、シナリオで機能しますか?

http://localhost:33021/api/employees/employee@company.com/
于 2012-11-08T22:33:09.770 に答える
2

IIS 設定を確認します。

Home Directory -> Configuration

.aspxアプリケーション拡張子を編集し、設定Verify that file existsがオフになっていることを確認します。

アップデート

デフォルトの 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>
于 2012-11-08T23:54:08.773 に答える