c# - asp.net WebForms 的 WebApi 路由返回 404

标签 c# ajax asp.net-web-api

我在 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/

相关文章:

c# - 在csproj文件中配置XamlRuntime和DefaultXamlRuntime意义

c# - 将 AddRange 用于新的 List<string>

javascript - AJAX 工具包 -- webservice 执行的问题

android - 使用 volley 调用 WebAPI

json - 将 json 数据传递给带有特殊字符的 Web Api 结果为 null

azure - 将 webAPI 发布到 Azure 时出现错误

c# - LINQ to XML C# 获取根元素属性

c# - 如何在特定时间后停止执行方法?

jquery - Fancybox jQuery ajax 成功绑定(bind)表单提交

jquery - 图像 slider Div 错误