接受两个具有相同名称的参数?

时间:2016-02-15 15:17:12

标签: c# asp.net-mvc-4 parameters guid

我现在有了这个代码

public ActionResult Index(Guid? id, string alias)
{
    var room = db.Rooms.FirstOrDefault(r => r.RoomLink == id || r.Alias == alias);

    if (room != null)
    {
    //some code with room...
    }
}

我的目标是在我的行动中接受两种网址(参数)。

字符串

www.example.com/Rooms/Aliasstring

的Guid

www.example.com/Rooms/387ecbbf-90e0-4b72-8768-52c583fc715

我在路由中有id,因此别名始终为空。

如果我能这样做会很好(如果参数是Guid OR参数是字符串或者都是Null)

public ActionResult Index(Guid? id, string? id)
{
    var room = db.Rooms.FirstOrDefault(r => r.RoomLink == id || r.Alias == id);
}

但我不能将两个id作为参数。

路线

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

我的模特

public Guid RoomLink { get; set; }
public string Alias { get; set; }

1 个答案:

答案 0 :(得分:2)

您可以通过简单检查输入参数

来避免路由问题
public ActionResult Index(string input)
{
    Guid guidOutput;
    bool isId = Guid.TryParse(input, out guidOutput);
    bool isAlias = !isId;

   var room = isId ?
              db.Rooms.FirstOrDefault(r => r.RoomLink == input) :
              db.Rooms.FirstOrDefault(r => r.Alias == input);

}