簡體   English   中英

ASP.NET WebApi更改訂閱源路由名稱

[英]ASP.NET WebApi Change Feed Route Name

我正在過渡使用WCF數據服務(因為它們顯然已經死了),並嘗試使用較新的Microsoft ASP.NET WebApi 2.1構建OData提要。 我正在尋找一種方法來重命名供稿,使其與類名不同。

我建立了我所有的控制器,現在我試圖稍微重命名它們,以保留集合實體與單個實體的思想。 (例如,提要應命名為WorkCategories,但類名稱應為WorkCategory)。 這可能嗎? 我想做這樣的事情:

public static void Register(HttpConfiguration config)
{
    builder.EntitySet<EmailSequenceItem>("EmailSequenceItems");
    builder.EntitySet<EmailSequence>("EmailSequences");
    builder.EntitySet<WorkCategory>("WorkCategories"); 
    ...
    config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());
    config.MapHttpAttributeRoutes();
}

我的控制器如下所示(從模板構建):公共類WorkCategoryController:ODataController {private dcMaintContext db = new dcMaintContext();

    // GET odata/WorkCategory
    [Queryable]
    public IQueryable<WorkCategory> GetWorkCategory()
    {
        return db.WorkCategories;
    }
    ...
}

但是,當我重命名任何提要時,得到的是導航到http://localhost/odata/WorkCategories時的404:

HTTP/1.1 404 Not Found
Message: No HTTP resource was found that matches the request URI 'http://localhost/odata/WorkCategories'."

MessageDetail: No type was found that matches the controller named 'WorkCategories'

啊哈! 我在發布它后發現了它。 我只需要將控制器類重命名為WorkCategoriesController,並將2個Queryable方法重命名為GetWorkCategories而不是WorkCategory

 public class WorkCategoriesController : ODataController
 {
        private dcMaintContext db = new dcMaintContext();

        // GET odata/WorkCategory
        [Queryable]
        public IQueryable<WorkCategory> GetWorkCategories()
        {
            return db.WorkCategories;
        }

        // GET odata/WorkCategory(5)
        [Queryable]
        public SingleResult<WorkCategory> GetWorkCategories([FromODataUri] int key)
        {
            return SingleResult.Create(db.WorkCategories.Where(workcategory => workcategory.ID == key));
        }
...
}

默認情況下,控制器的名稱應與EntitySet名稱相同,即WorkCategories。 因此,除非您創建自己的IODataRoutingConvention,否則除WorkCategoriesController以外的其他控制器名稱將不起作用。

對於方法名稱,webapi具有其默認路由規則。

  • 對於獲取實體集,GetWorkCategories()和Get()將起作用。
  • 對於get實體,GetWorkCategory(int鍵)和Get(int鍵)將起作用。

如果要自定義方法名稱,則可以在webapi 2.2中使用AttributeRouting。 http://blogs.msdn.com/b/webdev/archive/2014/03/13/getting-started-with-asp-net-web-api-2-2-for-odata-v4-0.aspx

[ODataRoute("WorkCategories/WhateverName")]
public IQueryable WhateverName() {...}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM