将web服务从asmx升级到webAPI
本文关键字:webAPI asmx web 服务 | 更新日期: 2023-09-27 18:21:07
我正在构建一个目前使用传统.asmx web服务的web应用程序,并希望将其升级到WebAPI。我在网上到处找,但我正在寻找最简单/最快的升级方法。目前的网络服务看起来有点像这样:
using System.Web.Services;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class SomeWebServiceName : System.Web.Services.WebService
{
SomeObject TheObject = new SomeObject;
[WebMethod(EnableSession = true)]
public string GetSomeData(string Param1, string Param2)
{
return TheObject.HandleRequest(Param1, Param2);
}
[WebMethod(EnableSession = true)]
public string GetSomeMoreData(string ParamA)
{
return TheObject.HandleAnotherRequest(ParamA);
}
}
在最简单的级别上,它们实例化一个对象,然后web服务的web方法调用该对象上的某个方法来处理请求。
在客户端上,我将jquery与.ajax()一起使用,如下所示:
$.ajax({
url: "../WebServices/SomeWebServiceName.asmx/GetSomeData",
data: AjaxData, ....});
我想删除对.asmx的任何引用,并将整个应用程序升级到WebAPI。使用上面的代码,最简单的方法是什么?
正如@Venkat所说:"直接回答并不容易";我的意思是,没有大量的手动编码;但在做一些假设时,我可以建议实现一个控制器,比如:
public class SomeWebServiceNameController : ApiController
{
SomeObject TheObject = new SomeObject();
public string GetSomeData(string Param1, string Param2)
{
return TheObject.HandleRequest(Param1, Param2);
}
public string GetSomeMoreData(string ParamA)
{
return TheObject.HandleAnotherRequest(ParamA);
}
[HttpPost]
public string PostSomeMoreData([FromBody]string ParamA)
{
return TheObject.HandleAnotherRequest(ParamA);
}
}
您还应该注册路由(通常在"WebApiConfig.cs"中):
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "NumberedParametersAPI",
routeTemplate: "WebServices/{controller}/{action}/{Param1}/{Param2}"
);
config.Routes.MapHttpRoute(
name: "CharacterizedParametersAPI",
routeTemplate: "WebServices/{controller}/{action}/{ParamA}",
defaults: new { ParamA = RouteParameter.Optional }
);
}
我包含了最后一个方法"PostSomeMoreData",以与您在问题中指定的客户端调用(jQueryajax方法调用)保持一致。但请记住,WebAPI POST方法中的原始参数有点令人困惑。请阅读以下链接:
http://www.intstrings.com/ramivemula/articles/testing-asp-net-web-apiget-post-put-delete-using-fiddler/
http://yassershaikh.com/how-to-call-web-api-method-using-jquery-ajax-in-asp-net-mvc-4/
http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/
在下面创建一个类,将其放在Controllers/Api文件夹下,在App_Start 下添加以下WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}/{id}",
new { id = RouteParameter.Optional, action = RouteParameter.Optional });
}
}
控制器编码
public class SomeWebServiceNameController : ApiController
{
SomeObject TheObject = new SomeObject;
[HttpGet]
public string GetSomeData(string Param1, string Param2)
{
return TheObject.HandleRequest(Param1, Param2);
}
[HttpGet]
public string GetSomeMoreData(string ParamA)
{
return TheObject.HandleAnotherRequest(ParamA);
}
}
在application_start下的global.asax.cs中添加以下调用以注册路由:
WebApiConfig.Register(GlobalConfiguration.Configuration);
这是一个非常简单的解释,您可能希望返回一个对象而不是字符串,但这应该做到
直接回答并不容易。首先,我们需要验证您的应用程序体系结构是否真正支持基于HTTP/REST的调用。我的请求是在我们迁移到Web API之前,目的需要明确。
我不确定最简单的方法,但最困难的方法是手动迁移。如果您的web服务在asmx方法后面有类文件,或者您的服务有抽象,我们可以很容易地重用抽象来升级到web API。
请查看下面的链接以更好地了解Web API:http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and-WCF-REST-and-Web-Service.html