将Web服务从asmx升级到webAPI
我正在构建一个当前使用传统.asmx Web服务的Web应用程序,我正在将这些服务升级到WebAPI。我在网上浏览过,但我正在寻找执行此升级的最简单/最快的方式。 Web服务目前看起来有点像这样:将Web服务从asmx升级到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({
url: "../WebServices/SomeWebServiceName.asmx/GetSomeData",
data: AjaxData, ....});
我想删除任何提及的.asmx和升级整个应用程序的WebAPI。用上面的代码做这件事最简单的方法是什么?
正如@Venkat所说:“直接回答并不容易”;我的意思是,没有大量的手动编码;但做一些假设,我可以推荐实现像一个控制器(通常是在“WebApiConfig.cs”)
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);
}
}
您也应该注册路线:
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”与您在问题中指定的客户端调用(jQuery ajax方法调用)保持一致。但请记住,WebAPI的POST方法中的原始参数有点混乱。请仔细阅读这些链接:
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/
直接回答并不容易。我们首先需要验证您的应用程序体系结构是否真的支持基于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
创建一个类下面,勿将控制器/阿比文件夹,添加以下WebApiConfig App_Start
下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 });
}
}
控制器Codee
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);
}
}
中的global.asax.cs添加下面的号召下的Application_Start到REGI这条路线:
WebApiConfig.Register(GlobalConfiguration.Configuration);
这是一个非常简单的解释,你可能想要返回一个对象而不是字符串,但应该这样做。
**/{行动}/**占位符在网页API冗余。 – Jude