ASP.NET Web API とコントローラー クラスを使用して、クライアントからの JSON データを処理しています。1 つのコントローラーに複数の Put メソッドが必要な状況に遭遇しました。
例:
私が持つことができた私のクライアント
var box = {size:2,color:'red',height:45,width:12}
ボックスオブジェクト全体を更新したい場合は、
public void Put(Box box)
{
}
わかりました、私はこれだけ得ました。
しかし、次のようにボックスの単一の値を更新できる必要があります。
public void Put(int id, width value)
{
}
public void Put(int id, height value)
{
}
public void Put(int id, color value)
{
}
追加の Put 動詞を .net c# コントローラー内からマップするにはどうすればよいですか?
作成した賞金用のコードをさらに追加します。私が提供しているコードを機能させる方法を教えてくれる人が必要です。複数のメソッドを1つにマッピングする必要がありますhttpVERB PUT
。サーバー上のアイテムをマイクロ更新する必要があるためです。name と同様に、ネットワークを介して大きなオブジェクトを送信して 1 つのフィールドを更新したくありません。これは、私のプログラムがモバイル デバイスにも接続されるためです。
---このコードは機能せず、 を返すだけPutName
でPutBrand
. 私はあなたが想像できるほぼすべての方法で署名を切り替えました。
[AcceptVerbs("PUT")]
[ActionName("PutBrand")]
public HttpResponseMessage PutBrand(int id, int val)
{
return Request.CreateResponse(HttpStatusCode.Created, "Brand");
}
[AcceptVerbs("PUT")]
[ActionName("PutName")]
public HttpResponseMessage PutName(IDString idString)
{
return Request.CreateResponse(HttpStatusCode.Created, "Name");
}
public class IDString
{
public IDString() { }
public int ID { get; set; }
public string Value { get; set; }
}
- - クライアント
$.ajax(
{
url: "/api/project",
type: "PUT",
data: JSON.stringify({ id: 45, val:'xxx' }),
contentType: "application/json",
success: function (result) {
}
});
---ルート設定
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
提案された解決策
$.ajax(
{
url: "/api/project?a=name",
type: "PUT",
$.ajax(
{
url: "/api/project?a=brand",
type: "PUT",
$.ajax(
{
url: "/api/project?a=size",
type: "PUT",
もちろん、a=myJavaScriptVariable の代わりに変数を使用します。
public HttpResponseMessage Put(Project project)
{
string update = HttpContext.Current.Request.QueryString["a"];
switch (update)
{
case "name":
break;
case "brand":
break;
case "size":
break;
default:
break;
}
return Request.CreateResponse(HttpStatusCode.Accepted);
}