ApiControllerがあり、リクエストのIDパラメータとしてメールアドレスを使用したい:
// GET api/employees/[email protected]
public CompactEmployee Get(string id) {
var email = id;
return GetEmployeeByEmail(email);
}
ただし、これを機能させることはできません(戻り値404):
http://localhost:1080/api/employees/[email protected]
次のすべての作業:
http://localhost:1080/api/employees/employee@company
http://localhost:1080/api/employees/employee@company.
http://localhost:1080/api/[email protected]
私はweb.configでrelaxedUrlToFileSystemMapping="true"
を Phil Haackにより詳細 として設定しました。
私は完全なメールアドレスが機能することを非常に気に入っていますが、ピリオドの後に他の文字が続く場合は常に、リクエストは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>
末尾のスラッシュを追加すると、シナリオに役立ちますか?
http://localhost:33021/api/employees/[email protected]/
IIS設定を確認してください:
Home Directory -> Configuration
.aspx
アプリケーション拡張および設定Verify that file exists
はオフです。
[〜#〜]更新[〜#〜]
デフォルトのMVC4 Web APIプロジェクトでテストしました
URL:http://localhost:10983/api/values/[email protected]
ValuesController
でのアクション:
public string Get(string id)
{
return id;
}
これは応答でした:
<string xmlns="http://schemas.Microsoft.com/2003/10/Serialization/">[email protected]</string>
これは私のために働いたものです:
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などに&などを含めることができるようにすることです。