2015-02-10 156 views
0

我在我的应用程序中使用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配置

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"); 
    } 
} 
+0

我们可以看到控制器? – Sefa 2015-02-10 06:44:26

+0

我添加了控制器。这是一个简单的控制器。当我在默认情况下调用控制器而不采取行动时,它会转到索引操作。但是当提到控制器后面的动作时,它显示没有发现错误。即使是索引操作也显示未找到错误。 – 2015-02-10 06:59:22

+0

我认为问题是你的网址中的“焦点”部分。它从何而来? – Sefa 2015-02-10 07:02:01

回答

0

您的网址http://localhost/Focus/Login/Logout不WebApiConfig routeTemplate的模式 “阿比/ {}控制器/(编号)” 相匹配。尝试将您的网址与模式相匹配。

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中的定义,它可能会或可能不会使用它。请尝试,我现在没有热情来测试它。

+0

谢谢你解决我的问题。网址:“{controller}/{action}”, – 2015-02-10 07:43:31

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 } 
    ); 
    } 
}