问题出现在我添加到RouteConfig.cs文件中的地图路线上,该路线将路线映射到我的Topic控制器。
这是我的RegisterRoutes方法,来自global.asax:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "ArticleByTitle",
url: "{controller}/{action}/{title}/{category}",
defaults: new { controller = "Topic", action = "Get", category = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Topic控制器包含指定的操作方法:
namespace Wiki.Controllers
{
public class TopicController : Controller
{
public ActionResult Get(string title, string category)
{
var topics = this.GetTopicsList();
var count = topics.Count(t => t.Category.Equals(category, StringComparison.CurrentCultureIgnoreCase)
&& t.Title.Equals(title, StringComparison.CurrentCultureIgnoreCase));
if (count > 1)
{
return RedirectToAction("Resolve", new { title = title });
}
if (count == 0)
{
return new HttpNotFoundResult();
}
var selectedTopic = this.GetTopicsList().FirstOrDefault(t => t.Title.Equals(title, StringComparison.CurrentCultureIgnoreCase));
return RedirectToAction("Display", new { topic = selectedTopic });
}
}
}
但是,永远不会调用此方法。相反,当我尝试通过应用程序中的链接到达它时,我收到HTTP 404错误,如下所示:
<a href="/topic/display/MyTopic">MyTopic</a>
我假设我的路由配置有问题,但对于我的生活,我看不出它是什么。有人可以指出我正确的方向吗?
答案 0 :(得分:1)
要调用Get操作,您的网址必须如下所示:
<a href="/topic/get/mytitle/mycategory"></a>
您还应该使用Html ActionLink助手生成链接,如下所示:
@Html.ActionLink("MyTopic", "Get", "Topic", new { title = "sometitle"}, null)
答案 1 :(得分:1)
您的href
似乎错过了您的行动(在您的情况下是Get
)
答案 2 :(得分:0)
尝试使用以下语法
action="@Url.Action("Go", "Home")"
用于您的HREF链接。