0

以下の契約をしています。

[OperationContract]
[WebGet(UriTemplate = "Devices/{*id}", ResponseFormat = WebMessageFormat.Json)]
Device GetDevice(string id);

デバイスのパスを表すため、デバイスの ID にはバックスラッシュ「\」と「&」を含めることができます。

ID を指定して GET 要求を送信すると、GetDevice 関数は ID を受け取りますが、バックスラッシュ「\」ではなくスラッシュ「/」が使用されます。

これを防ぐ方法はありますか?

4

1 に答える 1

2

WCF サービスに渡されるエンティティ キーの特殊文字を処理する方法については、こちらの記事をご覧ください。

あなたのケースで注目すべきは、リクエストフィルタリングをオフにしても、バックスラッシュが壊れるのを防ぐことはできないということです:

<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0"/> 
<pages validateRequest="false"/>

基になる URI パーサーが元の URI のエスケープを解除しているため、スラッシュと疑問符は問題があります。これら 3 文字の回避策は次のとおりです。

<configSections> 
    <section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
</configSections> 
<uri> 
    <schemeSettings> 
        <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/> 
        <add name="https" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/> 
    </schemeSettings> 
</uri>

(記事からも露骨に盗用。)

于 2013-10-25T15:47:05.640 に答える