asp.net WebForms的WebApi路由返回404

fre*_*hie 6 c# ajax asp.net-web-api

我在asp.net WebForms应用程序中配置WebApi路由时遇到了一些麻烦.

global.asax文件中,我有这样的事情:

void Application_Start(object sender, EventArgs e)
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
}
Run Code Online (Sandbox Code Playgroud)

我有另一个包含此代码的文件:

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 });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在根目录中,我有一个名为api的文件夹,在该文件夹中我有一个文件,其中包含一个看起来有点类似的类:

public class MyController : ApiController
{
    [Route("MyController")]
    [HttpPost]
    public HttpResponseMessage Post([FromBody]string value)
    {....}
Run Code Online (Sandbox Code Playgroud)

最后,在我的客户端代码中,我有这个ajax调用:

$.ajax({
    url: "/api/MyController",
    contentType: "application/json; charset=utf-8",
    type: "POST",
    dataType: "json",
    cache: "false",
    data: someData});
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,我得到的只是404错误.我需要在路由机制中进行哪些更改才能使其工作?

谢谢.

fre*_*hie 1

好吧,经过两周多的时间断断续续地想知道为什么看似简单的东西不起作用,我终于明白了!!!!

问题就出在这句话上:

然后,在根目录中,我有一个名为 api 的文件夹,在该文件夹中我有一个文件,其中包含... Web API 控制器文件

解决方案是 10 秒修复:

将MyWebAPIController.cs文件放入App_Code文件夹中

按照我的方式,.cs 文件位于名为的根目录中,/api因为我错误地认为,如果您想从客户端调用 Web 服务,/api/MyController则需要创建一个与该路径匹配的目录,然后将控制器放入其中目录。相反,您必须将控制器文件放在 App_Code 目录中。

LB2 的答案确实帮助我了解了属性,同时使用[RoutePrefix][Route]

[RoutePrefix("api")]
public class MyController : ApiController
{
    [Route("MyController")]
    public HttpResponseMessage Post([FromBody]string value)
Run Code Online (Sandbox Code Playgroud)

然后你可以这样调用它:

$.ajax({
    url: "/api/MyController",
    type:POST,
    ...});
Run Code Online (Sandbox Code Playgroud)

谢谢大家关注这个问题!!