0

モデルクラスを考える

public class MyModel
{
    public string Id { get; set; }

    /* some other properties */
}

そしてコントローラー

public class MyController
{
    [HttpPut]
    public ActionResult Update(string id, MyModel model)
    {
        /* process */
    }
}

ルーティングは次のように登録されます。

protected override void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute("MyController", 
                    "api/my/{id}",
                     new { action = "Update", controller = "My"},
                     new { httpMethod = new HttpMethodConstraint(new[] { "PUT" }) });

}

REST クライアントを使用し、JSON または XML リクエストとしてシリアル化された MyModel をこのコントローラーに送信すると、「MyModel」の null の「Id」プロパティがアクション メソッドの「id」パラメーターをオーバーライドします。 /api.example.com/api/my/10

ASP.NET MVC 3 に URL (この場合は「10」) から「id」プロパティを入力させ、「MyModel」の「Id」プロパティを無視するにはどうすればよいですか?

ASP.NET Web API を使用していないことに注意してください。

4

1 に答える 1

2

属性[FromUri]を使用してみてください。「System.Web.Http」にあります。アクション パラメーター ID のこの属性は、URL 要求を使用して結合する必要があることを示します。

using System.Web.Http;//at the top
public class MyController
{
    [HttpPut]
    public ActionResult Update([FromUri]string id, MyModel model)
    {
       /* process */
    }
}

MVC3 の場合、[FromUri] 属性を使用するために (nuget から、または手動で) web-api パッケージを含めてみてください。それが不可能な場合、私が考えることができる唯一の方法は、this.HttpContext.Request.QueryString["id"]

id をアクション メソッド パラメーターとして持つ代わりに、アクション本体で宣言します。URL クエリ api/my?id=1212 を変更する必要がある場合があります。最初に api/my/{id} 形式を使用してみてください。

var id = this.HttpContext.Request.QueryString["id"];
于 2012-06-04T05:04:54.487 に答える