未找到控制器操作

时间:2015-02-10 06:29:48

标签: asp.net-mvc asp.net-web-api routing asp.net-mvc-routing

我在我的应用程序中使用web api。 Web api 2路由工作正常,但找不到控制器动作路由。

enter image description here

这是我的全球cs

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        FluentValidationModelValidatorProvider.Configure();
    }
}

路线配置

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "Default",
            url: "{controller}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
    }
}

Web api config

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

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

控制器

public class LoginController : Controller
{
    public ActionResult Index()
    {
        return View("~/Views/Default/Login.cshtml");
    }

    public ActionResult LogOut()
    {
        var ctx = Request.GetOwinContext();
        var authManager = ctx.Authentication;

        authManager.SignOut("ApplicationCookie");
        return RedirectToAction("index", "home");
    }
}

3 个答案:

答案 0 :(得分:1)

将路线配置更改为

 public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "Default",
            url: "Focus/{controller}/{action}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
    }
}

由于“焦点”是在iis中定义的,它可能会也可能不会使用它。请尝试,我现在没有能力测试它。

答案 1 :(得分:0)

您的网址http://localhost/Focus/Login/Logout与WebApiConfig中的routeTemplate“Api / {controller} / {id}”模式不匹配。尝试将您的网址与模式匹配。

答案 2 :(得分:0)

谢谢deusExCore我解决了这个问题

 public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}",
        defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
    );
    }
}