You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Web API字符串反转接口404错误排查求助

问题排查与修复方案

核心问题分析

从错误日志和代码来看,导致404的原因有两个:

  1. 命名空间不匹配:控制器所在的ReverseStringAPI.Controllers命名空间与项目根命名空间WebApplication2不一致,Web API默认只会扫描根命名空间下的控制器,导致无法识别你的ReverseStringController。
  2. 路由注册顺序错误:Global.asax中先注册了MVC路由,后注册Web API路由。当请求/api/ReverseString进来时,MVC路由会先尝试匹配,而你的控制器继承的是ApiController(Web API控制器),不是MVC的Controller,所以MVC找不到对应的控制器,返回404。

具体修复步骤

1. 修正控制器命名空间

将ReverseStringController.cs的命名空间改为与项目一致的WebApplication2.Controllers:

using System;
using System.Web.Http;

namespace WebApplication2.Controllers
{
    [RoutePrefix("api/[controller]")]
    public class ReverseStringController : ApiController
    {
        [HttpPost]
        public IHttpActionResult ReverseString([FromBody] string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return BadRequest("Input string is required.");
            }

            char[] charArray = input.ToCharArray();
            Array.Reverse(charArray);
            string reversedString = new string(charArray);

            return Ok(reversedString);
        }
    }
}

2. 调整路由注册顺序

在Global.asax.cs中,将Web API路由注册移到MVC路由之前,确保Web API先处理匹配的请求:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace WebApplication2
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            // 优先注册Web API路由
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

3. Postman测试注意事项

  • 请求方法选择POST
  • URL填写项目运行后的地址,例如http://localhost:5000/api/ReverseString(替换成你的实际端口)
  • 请求体选择raw -> JSON,内容格式为带双引号的字符串,例如:
    "HelloWorld"
    

可选方案(不修改命名空间时使用)

如果需要保留控制器的原有命名空间,可以在WebApiConfig.cs中添加程序集扫描配置,让Web API能找到其他命名空间下的控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Dispatcher;

namespace WebApplication2
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // 替换默认程序集解析器,添加自定义扫描逻辑
            config.Services.Replace(typeof(IAssembliesResolver), new CustomAssembliesResolver());

            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }

    public class CustomAssembliesResolver : DefaultAssembliesResolver
    {
        public override ICollection<System.Reflection.Assembly> GetAssemblies()
        {
            var assemblies = base.GetAssemblies();
            // 加载控制器所在的程序集(如果是同一项目,可直接获取当前程序集)
            var controllerAssembly = System.Reflection.Assembly.GetExecutingAssembly();
            assemblies.Add(controllerAssembly);
            return assemblies;
        }
    }
}

内容的提问来源于stack exchange,提问作者FluffyFox332

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:14:54