在ASP.Net Web API客户端中显示另一个视图

时间:2016-04-02 06:03:06

标签: c# asp.net-mvc razor asp.net-web-api

Web API世界的新手,我似乎无法显示任何自定义视图。我已经完成了基础知识,在我的控制器中创建了一个方法,在我调用它的地方似乎已经纠正了。我对MVC比较熟悉,所以我想知道我在这里遗漏了什么东西吗?视图总是会返回一个无法访问的错误。

ActionResult,在生成的HomeController中:

[HttpGet]
public ActionResult SpotDetails()
{
    ViewBag.Title = "Spot Details";
    return View();
}

在菜单中调用它的链接:

<ul class="nav navbar-nav">
    <li>@Html.ActionLink("SHOR //", "Index", "Home", new {area = ""}, null)</li>
    <li>@Html.ActionLink("Index", "Index", "Home", new {area = ""}, null)</li>
    <li>@Html.ActionLink("Spot Profile", "SpotDetails", "Home", new {area = ""}, null)</li>
    <li>@Html.ActionLink("API", "Index", "Help", new {area = ""}, null)</li>
</ul>

我应该说索引和api帮助页面的链接工作正常。

这是我的RouteConfig,如果它有问题,我根本没碰过它:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

最后我的WebApiConfig:

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services
    config.Formatters.Remove(config.Formatters.XmlFormatter);
    config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling =
        Newtonsoft.Json.ReferenceLoopHandling.Ignore;

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

编辑 - 单击链接时的错误消息:

  

&#39; /&#39;中的服务器错误应用

     

无法找到资源。

     

说明:HTTP 404.您要查找的资源(或其某个&gt;依赖项)可能已被删除,名称已更改,或暂时>不可用。请查看以下网址,并确保正确拼写&gt;

     

请求的网址:/ Home / SpotDetails

1 个答案:

答案 0 :(得分:1)

这很可能是您的启动配置问题。路线必须按照从最具体到最不具体的顺序进行登记。您已在RouteConfig.RegisterRoutesWebApiConfig.Register方法中对此进行了解释。但是,您还必须在WebApiConfig.Register之前致电RouteConfig.RegisterRoutes,否则您的Default路线将优先于任何网络API路线。

WebApiConfig.Register(GlobalConfiguration.Configuration);
RouteConfig.RegisterRoutes(RouteTable.Routes);