【问题标题】:C# webapi mvc controller added before the /api/{controller}在 /api/{controller} 之前添加的 C# webapi mvc 控制器
【发布时间】:2018-03-11 17:09:14
【问题描述】:

我制作了一个 API 控制器,并在其他文章中进行了建议的更改。 (参考404 error after adding Web API to an existing MVC Web Application

我觉得我已经很接近解决方案了,但是我的页面仍然没有到达正确的控制器。当我使用 F12 工具时,我可以看到它在我的“/api/{controller}”之前添加了我的 MVC 控制器。显然我的路由仍然有问题,但我不确定如何解决?

TimeRegistrations 是我的 MVC 控制器,api/WorkOrderAPI 是我实际需要访问的控制器。路由应该是 /api/WorkOrderAPI。网址是为此而设计的: 请求的 URL:/TimeRegistrations/api/WorkOrderAPI

要获得我想要的页面,我来自:

localhost:1234/TimeRegistrations/Index

需要的表格被加载到页面上:

localhost:1234/TimeRegistrations/WorkOrderIndex

表格应在

处申请
localhost:1234/api/WorkOrderAPI

在我的应用程序启动中,我得到了:

 protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

在 webApiConfig 我有:

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

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

在 routeconfig 我有:

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

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

我的查看代码是:

function loadWorkOrders() {
    $.ajax({
        type: "GET",
        url: "api/WorkOrderAPI",
        success: function (data) {
            alert("Success");
            self.WorkOrders(data);
        },
        error: function (err) {
            alert(err.status + " from WorkOrderAPI");
        }
    });

提前致谢!

【问题讨论】:

  • TimeRegistrations 是我的 MVC 控制器,api/WorkOrderAPI 是我实际需要访问的控制器。 - 这没有多大意义。您是否有一个名为 WorkOrderAPIController 的控制器继承自 ApiController?或者您是否正在尝试访问 MVC 控制器(即使您无法使用 Web API)?

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


【解决方案1】:

您在 AJAX 调用中使用了相对路由。试试这个吧

url: "/api/WorkOrderAPI",

【讨论】:

  • 我知道我很接近,你说得对,我忽略了这一点!谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-08-11
  • 2012-12-12
  • 2015-01-12
  • 2017-07-16
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多