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

ASP.NET Core 2.0中添加asmx服务及JavaScript访问404问题求助

解决ASP.NET Core 2.0中asmx服务404的问题

我完全懂你现在的挫败感——想把旧的asmx服务搬到ASP.NET Core 2.0里,结果要么建不了新的,导入后又访问不了,浏览器还一直返回404,确实摸不着头脑。咱们先把核心原因说清楚:ASP.NET Core从根本上不支持传统的asmx Web服务,因为asmx依赖的System.Web组件在Core的架构里被彻底移除了,Core的请求管道根本不知道该怎么处理.asmx结尾的请求,这就是404的根源。

下面给你两个可行的解决方案,你可以根据自己的需求选择:


方案一:迁移到ASP.NET Core Web API(强烈推荐)

这是最符合Core生态的长期解决方案,毕竟asmx已经是被淘汰的技术了,Web API更适合现代Web开发。步骤很简单:

  • 新建一个Web API控制器:在Core项目里右键添加「控制器」,选择「API控制器 - 空」,比如命名为MyOldServiceController。
  • 迁移asmx的方法逻辑:把原来asmx里标记[WebMethod]的方法,复制到控制器里,改成API的Action。比如原来的:
    [WebMethod]
    public string GetUserInfo(int userId)
    {
        // 原来的业务逻辑
        return JsonConvert.SerializeObject(user);
    }
    
    改成:
    [HttpGet("GetUserInfo")]
    public IActionResult GetUserInfo(int userId)
    {
        // 复用原来的业务逻辑
        return Ok(user); // Core会自动序列化JSON
    }
    
  • 配置路由和Mvc:确保在Startup.cs的ConfigureServices里添加了services.AddMvc();,Configure方法里有app.UseMvc();。控制器上可以加[Route("api/[controller]")],这样前端调用的地址就是/api/MyOldService/GetUserInfo?userId=123。
  • 前端调整调用:把原来JavaScript里调用.asmx的代码改成调用这个API地址。如果需要跨域,记得在Startup.cs里配置CORS:
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll", policy =>
        {
            policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
        });
    });
    // 然后在Configure里添加 app.UseCors("AllowAll");
    

方案二:保留asmx服务(应急临时方案)

如果因为各种原因暂时不能迁移,也可以用这个办法绕开Core的限制:

子方案1:单独部署asmx服务

把原来的asmx服务放在一个独立的.NET Framework Web项目里(比如ASP.NET Web Forms或者MVC 5),部署到服务器上。然后前端直接调用这个独立项目的asmx地址,比如http://your-old-service.com/MyService.asmx/GetUserInfo。如果两个项目域名不同,记得在asmx项目里配置CORS(可以通过web.config或者代码添加),或者在Core项目里做反向代理,把asmx的请求转发到旧服务。

子方案2:用WCF替代asmx

ASP.NET Core 2.0支持WCF的部分服务端功能,你可以把asmx的逻辑迁移到WCF服务里:

  • 在Core项目里安装Microsoft.AspNetCore.Wcf相关NuGet包。
  • 定义服务契约和实现,把原来asmx的方法转换成WCF的操作契约。
  • 配置WCF服务的终结点,前端可以通过SOAP协议调用(需要用XmlHttpRequest或者SOAP客户端库)。不过这个方式不如Web API灵活,前端调用也更麻烦,只推荐实在没办法的时候用。

最后再提醒一句:别浪费时间尝试让Core直接处理asmx请求了,因为Core没有对应的请求处理程序,怎么配置都会404。迁移到Web API才是一劳永逸的办法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:39:33