2013-07-04 7 views
10

Ich erstelle eine Webanwendung, die derzeit traditionelle .asmx-Webdienste verwendet, und ich möchte diese auf WebAPI aktualisieren. Ich habe mich im Internet umgeschaut, aber ich suche nach dem einfachsten/schnellsten Weg, dieses Upgrade durchzuführen. Die Web-Services suchen derzeit etwas wie folgt aus:Aktualisieren eines Webdienstes von asmx auf 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); 
    } 
} 

Auf ihrer einfachsten Ebene sie ein Objekt instanziiert und dann die Web-Methoden des Web-Service-Aufruf einige Methode für das Objekt die Anfragen zu bearbeiten.

auf dem Client verwende ich jquery mit .ajax() wie folgt aus:

$.ajax({ 
    url: "../WebServices/SomeWebServiceName.asmx/GetSomeData", 
    data: AjaxData, ....}); 

ich jeden Hinweis entfernen möchten die gesamte Anwendung auf WebAPI .asmx und zu aktualisieren. Was ist der einfachste Weg, dies mit dem obigen Code zu tun?

Antwort

8

Wie @Venkat sagte: "Es ist nicht einfach, direkt zu antworten"; Ich meine, ohne nennenswerte manuelle Kodierung; aber einige Annahmen kann ich empfehlen, einen Controller wie zu implementieren:

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); 
    } 
} 

Sie sollten auch Routen registrieren (in der Regel in „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 } 
    ); 
} 

ich die letzte Methode „PostSomeMoreData“ enthalten konsistent mit dem Client-Aufruf sein, den Sie in Ihrer Frage angegeben haben (Aufruf der jQuery ajax-Methode). Bedenken Sie jedoch, dass primitive Parameter in der POST-Methode von WebAPI ein wenig verwirrend sind. Bitte lesen Sie diese Links:

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

**/{Aktion}/** Platzhalter in Web-API redundant sind. – Jude

1

Es ist nicht einfach, direkt zu antworten. Zuerst müssen wir Ihre Anwendungsarchitektur validieren, um HTTP/REST-basierte Aufrufe wirklich zu unterstützen. Meine Anfrage ist, bevor wir zur Web-API migrieren, den Zweck zu klären.

Ich bin nicht sicher, der einfachste Weg, aber der harte Weg ist, manuell zu migrieren. Wenn Ihre Web-Services Klassendateien hinter asmx-Methoden haben oder Sie Abstraktionen für Ihre Dienste haben, können wir die Abstraktion leicht wiederverwenden, um auf die Web-API zu aktualisieren.

Überprüfen Sie bitte den folgenden Link können Sie eine bessere Vorstellung über Web-API erhalten: http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and-WCF-REST-and-Web-Service.html

3

Erstellen Sie eine Klasse weiter unten, legen Sie sie unter Controller/Api Ordner, fügen Sie die folgende WebApiConfig unter 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 }); 
    } 
} 

-Controller 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); 
    } 
} 

den folgenden Aufruf in global.asax.cs unter Application_Start in den Regi ster die Strecke:

WebApiConfig.Register(GlobalConfiguration.Configuration); 

Dies ist eine sehr einfache Erklärung ist, und Sie würden wahrscheinlich wollen ein Objekt statt String zurück, aber das sollte es tun.

Verwandte Themen