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 错误的调用是:
目标是在没有 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
中启用
My Web API Asp.Net MVC 网络应用程序在接收未指定任何控制器的请求时出现 returning 404 错误。 returning 404 错误的调用是:
目标是在没有 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