我现在有了这个代码
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; }
答案 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);
}