gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:22:27 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com