Asp.Net MVC Web应用程序上的我的Web API在收到未指定任何控制器的请求时返回404错误。 返回404错误的调用是:
目标是处理这些类型的请求而不会返回错误并返回诸如“ true”或“ newEmptyResult()”之类的东西。
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);
}
答案 0 :(得分:1)
创建一个控制器来处理该路由,这样它就不会因找不到路由而失败
喜欢
[RoutePrefix("api")]
public class MyEmptyController : ApiController {
//GET api
[HttpGet]
[Route("")]
public IHttpActionResult Get() {
return StatusCode(HttpStatusCode.NoContent); //204
}
}
使用已通过 WebApiConfig
中的config.MapHttpAttributeRoutes();
启用的属性路由
答案 1 :(得分:0)
您的路由配置与WebApi配置不同,我不知道您呼叫它们的顺序。
在您的RouteConfig中:
url: "{controller}/{action}/{id}",
表示:http://localhost:PORTNUMBER/myApi1/ACTION
在您的WebApiConfig中
routeTemplate: "api/{controller}/{id}",
(方法和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