【问题标题】:Controller action not found未找到控制器操作
【发布时间】:2015-02-10 06:29:48
【问题描述】:

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

这是我的全局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 }
        );
    }
}

网页接口配置

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

【问题讨论】:

  • 我们能看到控制器吗?
  • 我添加了控制器。它是一个简单的控制器。默认情况下,当我在没有操作的情况下调用控制器时,它会转到索引操作。但是当在控制器之后提到该操作时,它会显示未找到错误。甚至 Index 操作也显示 not found 错误。
  • 我认为问题在于您的网址中的“焦点”部分。它来自哪里?
  • 项目网址:localhost/Focus 。我在本地 IIS 中定义了它

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


【解决方案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 中定义的,它可能会也可能不会与它一起使用。请试一试,我现在没有能力测试它。

【讨论】:

  • 谢谢它解决了我的问题。网址:“{controller}/{action}”,
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-16
      • 2021-03-28
      • 2014-08-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多