Web API 2 Odata V4修补程序返回404

Web API 2 Odata V4修补程序返回404,odata,asp.net-web-api2,odata-v4,Odata,Asp.net Web Api2,Odata V4,我有一个控制器: using System.Web.Http; using System.Web.OData; public class InvRecipientAutoInvoiceController : ODataController { // GET: odata/InvRecipientAutoInvoice [EnableQuery] public IQueryable<Inv_RecipientAutoInvoice&

我有一个控制器:

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
        }
    }
  • 答复机构:
{“错误”:{ “代码”:”“消息”:“未找到与请求URI匹配的HTTP资源 '',“内部错误”:{ “消息”:“在控制器‘InvRecipientAutoInvoice’上未找到与 请求“,”类型“:”堆栈跟踪“:” }}}

  • 请求机构:
我正在ASP.net web项目(不是MVC)中使用它

登记册为:

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

我缺少什么?

当你打电话时,请求的内容类型是什么?是应用程序/json补丁+json吗?(代替application/json)

@yaniv

似乎您希望使用内置路由约定来使用组合键修补实体。但是,不支持组合键

您可以自定义自己的路由约定(请参见),也可以只使用

属性路由简单易用。你只需要在你的补丁动作上加上一个补丁,它就会起作用

[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
}
[AcceptVerbs(“补丁”、“合并”)]
[ODateRoute(“InvRecipientAutoInvoice(RecipientNumber={RecipientNumber},RecipientType={RecipientType})”]
公共IHttpActionResult修补程序([FromODataUri]int RecipientNumber,[FromODataUri]int RecipientType,增量修补程序)
{
//XXXX一些更新代码
}
谢谢

config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel());
[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
}