gpt4 book ai didi

c# - 在 api 文件夹中使用遗留 asmx 服务的 Web Api 2 路由配置

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:22 25 4
gpt4 key购买 nike

我正在尝试将 Web Api 功能添加到现有的 ASP.NET 应用程序中。这应该很简单,但我已经坚持了几个小时。我已经尝试了很多东西,但到目前为止没有运气。

该应用程序在“/api”文件夹中有多个 asmx 服务。这会以某种方式干扰 web api 路由。理想情况下,我希望将现有服务保留在当前位置,因为存在对它们的外部引用。

示例服务:/Api/ApiServ.asmx - 我能够使用方法列表调用初始屏幕

问题是当我尝试在其中一项服务上调用任何方法时,例如/Api/ApiServ.asmx/ServMethod - 我无法调用它,并且收到此响应:“找不到与请求 URI 'http://localhost:49415/api/apiserv.asmx/ServMethod' 匹配的 HTTP 资源”

这是我的:全局.asax:

public class WebApiApplication : HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
//RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}

示例服务:

namespace WebApiTest.Api
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
public class ApiServ : WebService
{
[WebMethod]
public string ServMethod()
{
return "Test";
}
}
}

网络 API 配置:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.IgnoreRoute("asmx", "api/{resource}.asmx/{*pathInfo}");

// Web API routes
config.MapHttpAttributeRoutes();

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

奇怪的是,当我使用路由调试器时,它实际上与 asmx 忽略路由匹配,但服务方法没有被命中。任何帮助表示赞赏!

最佳答案

我实际上并没有想出一个合适的修复方法,因为我已经没有时间来解决这个问题,但是由于解决方案是临时的,并且会将 asmx 服务移动到 Web API Controller ,所以我决定采用一种解决方法。

我是这样做的:1) 在/Api 文件夹中,我创建了一个/Legacy 子文件夹,并将所有 asmx 服务移到那里

2) 在 global.asax Application_BeginRequest 中:

private void Application_BeginRequest(object sender, EventArgs e)
{
string url = Request.Url.AbsolutePath.ToLower();

if (url.StartsWith("/api") && url.Contains(".asmx") && !url.Contains("/api/legacy/"))
{
url = Request.Url.AbsolutePath.Replace("/api/", "/api/legacy/");

Context.RewritePath(url);
}
}

请注意,类似的事情可以通过更文明的方式实现,例如使用重写模块,但这对我来说是一个临时解决方案。

关于c# - 在 api 文件夹中使用遗留 asmx 服务的 Web Api 2 路由配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28323082/

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