0

API パラメータの読み取りに使用されるモデルを無視する API コマンドの奇妙なケースがあります。これがコマンドとモデルです。

    [HttpGet]
    public HttpResponseMessage Debates(string tag, [FromUri]GetDebatesModel model)
    {
        if (!ModelState.IsValid)
        {
            return CreateResponse(HttpStatusCode.BadRequest, ModelState);
        }

        return Request.CreateResponse(HttpStatusCode.OK, model.Fields);
    }

モデル:

public class GetDebatesModel 
{
    public GetDebatesModel()
    {
        Fields = "(default)";
    }

    public string Fields{ get; set; }
}

コマンドをこの関数にマップする WebApiConfig は次のとおりです。

    config.Routes.MapHttpRoute(
            name: "contentNestedControllers",
            routeTemplate: "content/{controller}/{tag}/{action}",
            defaults: new { }
        );

/content/hashtag/%23MinimumWage/Debates を実行すると、予想されるデフォルト値の「(デフォルト)」が提供されるだけです。これは、モデルを認識してインスタンス化することを意味します。

/content/hashtag/%23MinimumWage/Debates?fields=someRandomnessHere を実行すると、最初から fields パラメータを含めなかった場合と同じ結果が得られます。

興味深いことに、フィールド パラメータは、タグ パラメータを int に変更すると機能しますが、文字列の場合は失敗します。誰もこれを説明できますか?

4

1 に答える 1

0

uri の %23 が問題であることが判明しました。それを削除すると、モデルが再び機能しました。

于 2013-08-19T22:14:50.763 に答える