Asp.Net MVC 中 Web API 的默认控制器操作

Default controller action for Web API in Asp.Net MVC

My Web API Asp.Net MVC 网络应用程序在接收未指定任何控制器的请求时出现 returning 404 错误。 returning 404 错误的调用是:

https://myWebApp/api/

目标是在没有 returning 错误和 return 类似 "true" 或 "new EmptyResult()".

的情况下处理这些类型的请求

Web 的当前路由 API 在 WebApiConfig.cs

中包括以下内容
public static class WebApiConfig
    {                
        public static void Register(HttpConfiguration config)
        {   
            config.Filters.Add(new IdentityBasicAuthenticationAttribute());

            config.MapHttpAttributeRoutes();

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

虽然我为每个 API 控制器明确定义了路由:

[IdentityBasicAuthentication]
[Authorize]
public class myApi1Controller : ApiController
{
    [HttpGet]
    [Route("api/myApi1")]
    public string Get(string id) { ... }
}

我尝试将这些调用路由到默认 API 或 MVC 控制器,但没有成功。

我当前的 MVC 应用程序 RouteConfig 是:

public class 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 },
            namespaces: new[] { "myWebApp.Controllers" }
        );
    }
}

它们的调用顺序是:

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

您的路由配置与您的 WebApi 配置不同,我不知道您调用它们的顺序。

在您的 RouteConfig 中:

  url: "{controller}/{action}/{id}",

这意味着:http://localhost:PORTNUMBER/myApi1/ACTION

在您的 WebApiConfig

routeTemplate: "api/{controller}/{id}",

(method 和 id 是可选的) 这意味着:http://localhost:PORTNUMBER/api/myApi1/?id=value

更改您的 WebApiConfig,您甚至可以避免在控制器中使用 Route 标记:

  [IdentityBasicAuthentication]
    [Authorize]
    public class myApi1Controller : ApiController
    {
        [HttpGet]
        public string Get(string id) { 
    return "works!";
     }
    }

编辑: 保持一切相同,从以下位置调用默认的 GET 方法: http://localhost:PORTNUMBER/api/myApi1

创建一个控制器来处理该路由,这样它就不会因未找到而失败

喜欢

[RoutePrefix("api")]
public class MyEmptyController : ApiController {
    //GET api
    [HttpGet]
    [Route("")]
    public IHttpActionResult Get() { 
        return StatusCode(HttpStatusCode.NoContent); //204
    }
}

使用属性路由,因为它已通过 config.MapHttpAttributeRoutes();WebApiConfig

中启用