1

私はこのコントローラを持っています:

using System.Web.Http;
using System.Web.OData;

public class InvRecipientAutoInvoiceController : ODataController
    {
        // GET: odata/InvRecipientAutoInvoice
        [EnableQuery]
        public IQueryable<Inv_RecipientAutoInvoice> GetInvRecipientAutoInvoice()
        {
            return db.Inv_RecipientAutoInvoice.Where(a=>a.CompanyNumber == CompanyNumber);
        }

    [AcceptVerbs("PATCH", "MERGE")]   
    public IHttpActionResult Patch([FromODataUri] int RecipientNumber , [FromODataUri] int RecipientType, Delta<Inv_RecipientAutoInvoice> patch)
        {
            // XXXX Some Update Code
        }
    }

GET が機能し、結果を取得して並べ替えることもできます。しかし、PATCH リクエストを実行すると、404 エラー、PATCH リクエストが発生します。

リクエスト URL: http://localhost:61240/odata/InvRecipientAutoInvoice(RecipientNumber%3D443%2CRecipientType%3D400)

   Request Method: PATCH
  • 応答本文:

{ "エラー":{ "コード":"","メッセージ":"要求 URI に一致する HTTP リソースが見つかりませんでした ' http://localhost:61240/odata/InvRecipientAutoInvoice(RecipientNumber=443,RecipientType=400) ' .","innererror":{ "メッセージ":"コントローラー 'InvRecipientAutoInvoice' で、要求に一致するアクションが見つかりませんでした。","type":"","stacktrace":"" } } }

  • リクエスト本文:
{"InvoiceLine1Description":"32132"}

ASP.net Web プロジェクト (MVC ではない) で使用していますが、

レジスタは次のとおりです。

config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel());

私は何が欠けていますか?

4

2 に答える 2

1

@ヤニフ

組み込みのルーティング規則を使用して、エンティティに複合キーをパッチする必要があるようです。ただし、組み込みのルーティング規則は複合キーをサポートしていません。

独自のルーティング規則 (ここを参照) をカスタマイズするか、単に属性 routingを使用することができます。

属性ルーティングはシンプルで使いやすいです。PatchアクションにODataRouteAttributeを配置するだけで、動作するはずです。

[AcceptVerbs("PATCH", "MERGE")]
[ODateRoute("InvRecipientAutoInvoice(RecipientNumber={RecipientNumber},RecipientType={RecipientType})"]
public IHttpActionResult Patch([FromODataUri] int RecipientNumber , [FromODataUri] int RecipientType, Delta<Inv_RecipientAutoInvoice> patch)
{
     // XXXX Some Update Code
}

ありがとう。

于 2015-11-02T02:36:56.873 に答える
0

電話をかけるとき、要求された contenttype は何ですか? application/json-patch+json ですか? ( application/json の代わりに)

于 2015-11-02T00:02:16.613 に答える