我在 asp.net WebForms 应用程序中配置 WebApi 路由时遇到了一些问题。
在 global.asax
文件中,我有这样的内容:
void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
我有另一个包含此代码的文件:
using System.Web.Http;
namespace WebConfig
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}",
defaults: new { id = System.Web.Http.RouteParameter.Optional });
}
}
}
然后,在根目录中,我有一个名为 api 的文件夹,在该文件夹中我有一个文件,其中包含一个看起来有点像这样的类:
public class MyController : ApiController
{
[Route("MyController")]
[HttpPost]
public HttpResponseMessage Post([FromBody]string value)
{....}
最后,在我的客户端代码中,我有这个 ajax 调用:
$.ajax({
url: "/api/MyController",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
cache: "false",
data: someData});
但是,当我运行这段代码时,我得到的只是一个 404 错误。我需要在路由机制中更改什么才能使其正常工作?
最佳答案
我认为其他人非常接近。试试这个:
[RoutePrefix("api")] // or maybe "api/", can't recall OTTOMH...
public class MyController : ApiController
{
[Route("MyController")]
[HttpPost]
public HttpResponseMessage Post([FromBody]string value)
然后请求/api/MyController
如果这不起作用,请使用 RouteDebugger分析您的路线,以及它拒绝匹配的原因。使用您在 RouteDebugger 中看到的内容修改您的问题,以便我可以追踪不匹配的内容。
此外,您可能需要调用 MapHttpAttributeRoutes
在你的Register
功能 - 但不确定。
编辑
现在我再次查看它,我认为我发现了更多问题。
首先,让我们从模板开始:
这是你所拥有的(来自你的问题):
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}",
defaults: new { id = System.Web.Http.RouteParameter.Optional });
奇怪的是你的模板没有{id}
段,但被定义为可选的。听起来模板中缺少它,应该将路线更改为:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional });
请注意,您还删除了默认操作 - 我不确定 MVC 是否自动使用约定方法来定位名为 Post
的方法,但我想是的。
第二个问题是您的方法签名是(同样来自您的问题):
public HttpResponseMessage Post([FromBody]string value)
它定义了Post
它接受一个名为 value
的参数,而您的路线定义了名为 id
的参数.因此,还有另一个不匹配。您可以重命名变量或装饰(见下文)。另外,{id}
标记为可选,但我相信(这里我不记得到底是 OTTOMH)对于 {id}
的情况,您需要为 value 提供默认值未提供,因此组合在一起:
public HttpResponseMessage Post([FromBody(Name="id")]string value = null)
这应该解决它,虽然可能还有更多问题......但让我们从这些开始吧。
关于c# - asp.net WebForms 的 WebApi 路由返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23529581/