将Web服务从asmx升级到webAPI

fre*_*hie 10 c# asp.net asp.net-web-api

我正在构建一个当前使用传统.asmx Web服务的Web应用程序,我正在寻求将它们升级到WebAPI.我在网上环顾四周,但我正在寻找最简单/最快的方式来进行升级.Web服务目前看起来有点像这样:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在最简单的级别,它们实例化一个对象,然后Web服务的Web方法调用该对象上的一些方法来处理请求.

在客户端上,我使用jquery和.ajax()这样:

$.ajax({
    url: "../WebServices/SomeWebServiceName.asmx/GetSomeData",
    data: AjaxData, ....});
Run Code Online (Sandbox Code Playgroud)

我想删除对.asmx的任何引用,并将整个应用程序升级到WebAPI.使用上面的代码,最简单的方法是什么?

Ric*_*ngo 10

正如@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);
    }
}
Run Code Online (Sandbox Code Playgroud)

您还应该注册路线(通常在"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 }
    );
}
Run Code Online (Sandbox Code Playgroud)

我包含了最后一个方法"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/