2017-09-04 124 views
0

的最佳实践,我们作为什么是通枚举类型的WebAPI

public enum Country 
     { 
      UK = 1, 
      US = 2, 
      Japan = 4, 
      China = 8, 
      Germany = 16, 
     } 

我们想通过在URL参数枚举一个枚举类型,然后的WebAPI可以根据国家搜索结果

有时,我们允许将国家合并为Country.UK | Country.China | Country.Germany(因此数字为25)

在这种情况下,传递枚举类型的最佳做法是什么?我们是否应该通过号码在URL国家= 25(不是用户友好的),或者通过URL像国家=英国&国家=中国&国家=德国该网址会很长又丑....

+1

为什么不'国家= 25'? –

+1

为什么该网址需要用户友好 - 您的用户是否要输入自己的网址 – PaulF

+0

@PaulF我的用户需要使用网络服务 – allencharp

回答

0

使用创建时Country.Us仅向国家/地区名称添加URL的URL。

return RedirectToAction("SomeAction", "Controller", new { username = user.UserName, country = Country.Us }); 

此生成此网址: http://somesite.com/Controller/SomeAction?username=username&country=US

,这是很好的搜索引擎优化和用户的观点。而不是country=2这并不意味着什么。

和获取请求时:

[HttpGet] 
    public ActionResult SomeAction(string username, Country? country) 
    { 

如果你想多个国​​家传递到一个动作,我建议的名字向他们依然。不过,我想将名称更改为countries

http://somesite.com/Controller/SomeAction?username=username&countries=US&countries=UK

[HttpGet] 
    public ActionResult SomeAction(string username, Country[] country) 
    { 
+0

这不回答这个问题。问题是关于标志组合案例。 – Kapol

+0

@卡波尔我明白这个问题是错的。我将编辑答案 –

+0

Downvote removed :-) – Kapol

0

枚举将与解析 “” 不是 “|”。 用Flags标记您的枚举并在您的URL中使用“,”。

[Flags] 
public enum Country 
{ 
    UK = 1, 
    US = 2, 
    Japan = 4, 
    China = 8, 
    Germany = 16, 
} 

URL: “路径到你ControllerMethode” + ?country=US,UK,Japan