路由参数中拥有枚举类型,是否可行?

5

我有一个简单的API函数:

// POST: api/Cultivation/Sow/1/5
[HttpGet("Sow/{grain}/{id}")]
public IActionResult Sow(Grain grain, int id) { }

我的枚举看起来像这样:

public enum Grain
{
    None,
    Rice,
    Corn,
    Oats
}

我的问题是,是否可以从Route中获取Grain或任何枚举类型?如果可以,如何实现?
如果不行,有没有一种优雅的方法通过int“查找”枚举类型,而不需要if语句等条件判断?因为如果我的Webapi不能接收枚举类型,那么简单的int就可以解决问题。

1
请查看这个链接 :) https://dev59.com/UVgQ5IYBdhLWcg3wxGvs - Ivan Kaloyanov
谢谢,这真的很有帮助,但我正在寻找一种通过属性轻松完成它的方法,因为我正在寻找一种简单的设置方式。如果无法通过简单的“Route”属性获取枚举,那么我就选择使用“int”;) - michasaucer
简单的强制类型转换,如(Grain)grain可以工作。 - michasaucer
3个回答

1
请参阅此文档:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.2#use-routing-middleware 希望这可以帮到你。
您可以像您展示的那样添加网址。
app.UseMvc(routes =>
{
    routes.MapRoute("default", "{controller=Home}/{action=Index}/{grain=somedefault}/{id?}");
});

在花括号 ({ ... }) 中定义的令牌是路由参数,如果匹配路由,则绑定这些参数。您可以在路由段中定义多个路由参数,但它们必须用字面值分隔。例如,{controller = Home} {action = Index} 不是有效的路由,因为 {controller} 和 {action} 之间没有字面值。这些路由参数必须有名称,并且可以指定其他属性。

0

试试这个。

[HttpGet("Sow/{id}/{grain}")]
public IActionResult Sow( int id , Grain grain = Grain.none) { }

请注意 - 只能存在一个使用枚举的操作。如果您尝试使用不同的枚举进行两个或更多个操作,将无法正常工作并导致500错误。 - PKCS12

0
public enum EnumReviewStatus
{
    Overdue = 4,
}

public IActionResult Index(EnumReviewStatus? statusFilter = null)

网址 Index?statusFilter=Overdue 是有效的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接