所以这是我的代码:
Controller.cs
[Route("{controller}/{slug}")]
public ActionResult Details(int? id, string slug)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Tv tv = db.Tv.Find(id);
if (tv == null)
{
return HttpNotFound();
}
return View(tv);
}
{slug}是一个标题。但我的网址正在显示
{controller}/{slug}?id=4
现在我必须将Id传递给控制器,这样我才能在数据库中找到记录,但我不想在URL中找到它。
如何删除ID?
答案 0 :(得分:0)
所有获取参数都必须在URL中。唯一的另一种方法是将ID添加为标头,并从标头集合中提取它。由客户端通过标头传递此值,并使用您的API强制ID作为标头变量。这是解决这个问题的唯一方法,因为你必须以某种方式传递ID。
或者,如果标题是唯一的,请使用它来查找控制器中的ID。
编辑:另一种选择,您可以使用FORM POST并将ID放在表单中。您可以将按钮设置为看起来像链接。
答案 1 :(得分:-1)
好的,所以我相信我已经解决了这个问题,同时仍然保留了GET方法,而不是使用POST。
我的Model类有2个键。通常,您需要将两个密钥都传递给控制器,但是使用下面的代码只允许我发送一个密钥。这意味着我可以避免ID在URL中并仍然将其作为模型中的密钥。
[Route("TvShows/{slug}")]
public ActionResult Details(string slug)
{
if (slug == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Tv tv = db.Tv.Where(x => x.TvTitle == slug).FirstOrDefault();
if (tv == null)
{
return HttpNotFound();
}
return View(tv);
}