我现在有这个代码了
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...
}
}
我的目标是在我的操作中接受两种 url(参数(。
字符串
www.example.com/Rooms/Aliasstring
吉德
www.example.com/Rooms/387ecbbf-90e0-4b72-8768-52c583fc715
我在路由中有id
,所以别名总是空。
如果我能这样做会很好(如果参数是 Guid 或参数是字符串或两者都为 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; }
您可以通过简单的检查输入参数来避免路由问题
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);
}