gpt4 book ai didi

c# - 属性路由 - 枚举未解析

转载 作者:行者123 更新时间:2023-11-30 20:54:52 28 4
gpt4 key购买 nike

我正在尝试创建路线,但在这种情况下它不起作用:

如果我调用:

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,
}

和 Controller :

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,那么您将遇到与您遇到的相同的错误。此 url 将解析 ProductController 的 Controller ,其中一个名为 type 的参数的值为 Generic

但是,您的type 参数的实际类型为GType,它是一个枚举。 Generic 不是该值的有效值,因此会发生错误。这与发送“abcd”作为 int 参数的值相同。

如果您尝试对 http://mysite.com/product/Big 调用 get,它将起作用,因为它能够解析该值 (Big) 和GType 枚举。

关于c# - 属性路由 - 枚举未解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728209/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com