簡體   English   中英

屬性路由-未解析枚舉

[英]Attribute routing - Enum not parsed

我正在嘗試創建一條路線,但在這種情況下不起作用:

如果我打電話給:

http://mysite.com/api/v1/product/Generic/1A 

工作正常。

如果我打電話給:

http://mysite.com/api/v1/product?=Generic 

也可以,但是當我打電話時:

http://mysite.com/api/v1/product/Generic 

我收到此錯誤:

{
 "Message":"The request is invalid.",
 "MessageDetail":"The parameters dictionary contains a null entry for parameter 'type'
 of non-nullable type 'GType' for method 'System.Net.Http.HttpResponseMessage 
 Get(GType)' in 'MySite.ControllersApi.V2.ProductController'. An optional parameter must 
 be a reference type, a nullable type, or be declared as an optional parameter."
}

我的路線代碼:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute
        (
            name: "DefaultApi",
            routeTemplate: "api/{version}/{controller}/{type}/{id}",
            defaults: new { id = RouteParameter.Optional, version = "v1", controller = "Product" }
        )
    }
}

public enum GType
{
    Big,
    Small,
    Generic,
}

和控制器:

public HttpResponseMessage Get(GType type)
{
    ...
}

public HttpResponseMessage Get(GType type, string id)
{
    ...
}

因此,Web API不會解析URL中的值。 我忘記了什么嗎?

嗯,我仍然看不到您的第一個URL實際如何工作,但是第二個URL的問題是您試圖將無效的數據位作為參數傳遞。

為了簡單起見,我僅假裝一分鍾,您的路由定義是這樣的:

 routeTemplate: "api/{controller}/{type}/{id}",
 defaults: new { id = RouteParameter.Optional }

如果您要在此URL http://mysite.com/product/Generic上調用GET,那么您將遇到遇到的相同錯誤。 此網址將解析ProductController的控制器,其參數名為type的值將為Generic

但是,您的type參數具有一個實際的GType Type,它是一個枚舉。 通用不是有效值,因此會發生錯誤。 這與發送“ abcd”作為int參數的值相同。

如果您嘗試調用http://mysite.com/product/Big的get,它將可以工作,因為它可以解析該值(Big)和GType枚舉的成員。

問題是我有兩個等值路由,但參數名稱不同。

api/{version}/{controller}/{type}/{id} 

api/{version}/{controller}/{id}

第二個必須是聲明的最后一條路線。

您顯示給我們的路線與您嘗試訪問的URL遠程匹配。 我覺得您在尋找錯誤的路線。 另外, "/Product/"不應該是“ /{controller}/"嗎?

哦,您在代碼段中拼寫了routeTamplate [sic]。 我認為那是一個轉錄錯誤-我很確定編譯器會對此進行吠叫。

暫無
暫無

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

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