【问题标题】:Web API 2 Odata V4 PATCH return 404Web API 2 Odata V4 PATCH 返回 404
【发布时间】:2015-11-01 16:18:55
【问题描述】:

我有这个控制器:

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 请求:

请求网址:http://localhost:61240/odata/InvRecipientAutoInvoice(RecipientNumber%3D443%2CRecipientType%3D400)

   Request Method: PATCH
  • 响应正文:

{ “错误”:{ "code":"","message":"没有找到与请求 URI 匹配的 HTTP 资源 'http://localhost:61240/odata/InvRecipientAutoInvoice(RecipientNumber=443,RecipientType=400)'.","innererror":{ "message":"在控制器 'InvRecipientAutoInvoice' 上找不到与 请求。","type":"","stacktrace":"" } } }

  • 请求正文:
{"InvoiceLine1Description":"32132"}

我在 ASP.net Web 项目(不是 MVC)中使用它,

寄存器是:

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

我错过了什么?

【问题讨论】:

    标签: odata asp.net-web-api2 odata-v4


    【解决方案1】:

    @yaniv

    您似乎想使用内置的路由约定来修补具有复合键的实体。但是,the built-in routing conventions 不支持复合键。

    您可以自定义自己的路由约定(请参阅here)或只使用attribute 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
    }
    

    谢谢。

    【讨论】:

      【解决方案2】:

      当您拨打电话时,请求的内容类型是什么?是 application/json-patch+json 吗? (而不是 application/json )

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        • 1970-01-01
        • 1970-01-01
        • 2015-11-10
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多