将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://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/

+0

**/{行动}/**占位符在网页API冗余。 – Jude

直接回答并不容易。我们首先需要验证您的应用程序体系结构是否真的支持基于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); 

这是一个非常简单的解释,你可能想要返回一个对象而不是字符串,但应该这样做。