2012-11-09 3 views
4

Je suis censé accéder à une ressource en utilisant JS depuis notre serveur. J'ai mis en place le code ci-dessous.Utiliser JavaScript pour se connecter à un serveur .NET

var targetUrl = "http://somePlace.com/actualResourceName"; 
var xdr = new XDomainRequest(); 
xdr.onload = function() { alert(xdr.responseText); } 
xdr.open("GET", targetUrl); 
xdr.send(); 

Cependant, je ne comprends pas comment la méthode de l'autre côté doit être créée. Je suis venu avec la suggestion suivante, pleinement conscient que cela ne fonctionne pas. Je suis sûr que je manque les bons attributs, par exemple. Je ne suis même pas sûr où définir que la méthode est censé réagir sur actualResourceName ...

[???] 
public String ActualResourceName() 
{ 
    return "Bye, bye, cruel word!"; 
} 

J'ai googlé autour mais je ne l'ai pas trouvé de solution. J'aurais pu trébucher dessus sans réaliser que c'est quelque chose d'utile, cependant.

Comment écrire la méthode en C#?

+0

Je suppose que ça va être un service REST, écrit en C#. Quel type de service est utilisé ici? ASP.NET WebApi? Pile de service? Ou peut-être même ASP.NET MVC? Si rien de tout cela ne vous tente, vous êtes en train de réinventer la sensation et la douleur qui vont avec ... :) –

+2

Vous voudrez probablement créer un service WCF qui sera installé sur le serveur et répondra aux demandes de votre côté client javascript. Si personne ne vous donne une réponse décente, je vais essayer de poster un exemple de code complet plus tard ce soir si j'ai le temps. Le lien suivant vous donne un pas à pas étape par étape et vaut la peine de lire (il est un peu long) http://msdn.microsoft.com/en-us/library/dd203052.aspx –

+1

Je recommanderais d'utiliser ASPIC.NET Web API pour une API REST facile à développer qui peut être appelée à partir de JavaScript/JQuery. ASP.NET Web API est un effort conjoint des équipes ASP.NET et WCF et représente l'orientation future des services Web RESTful. Un tutoriel complet sur la façon de créer le service Web et le JavaScript pour l'appeler peut être trouvé ici http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial- your-first-web-api –

Répondre

5

OK, c'est parti. Je vais décrire deux façons pour le faire, les plus faciles:

1. ASP.NET WebApi

Vous devez créer un nouveau projet ASP.NET MVC4 (que ce soit libérer ou RC), sélectionnez le « WebAPI » comme une option: Project startup

Et vous aurez le modèle prêt. Maintenant, vous faites un clic droit dossier 'contrôleurs, puis Ajouter -> Contrôleur: enter image description here

et le remplir par exemple comme ça:

public class ActualResourceController : ApiController 
{ 
    public string Get() 
    { 
     return "Hey there! Getting the resource..."; 
    } 
} 

routes par défaut sont Global.asax, quand vous allez à la définition de la méthode WebApiConfig.Register(...), vous verrez que la route par défaut est host/api/controller. Essayons sur, lorsque vous démarrez le projet et passer sous (dans mon cas, le port est choisi automatiquement par le serveur de développement) http://localhost:23030/api/ActualResource vous obtiendrez:

<string>Hey there! Getting the resource...</string> 

WebAPI retourne JSON ou XML en fonction de l'en-tête Accept, si vous voulez que JSON soit le seul/par défaut, prenez a look at this link.

Vous pouvez bien sûr créer une classe et la renvoyer, elle sera sérialisée en XML/JSON d'une manière similaire voir ci-dessous avec ServiceStack.


2. ServiceStack

Maintenant, le ServiceStack est puissant, open-source-cadre de services Web REST. Cela fonctionne un peu différemment de WebApi, et voici une introduction rapide (bien que la documentation soit bonne):

Créez le projet ASP.NET MVC normal (dans mon cas, MVC4) - vous aurez un template vide:

service stack startup project

Puis le feu de la console package Manager et le type (comme la documentation suggère) Install-Package ServiceStack.Host.Mvc, qui vous permet d'obtenir un modèle de projet ServiceStack avec une application tutoriel et ce que vous pouvez par la suite supprimer si vous le souhaitez.

Mais tout d'abord, le ServiceStack fonctionne sur les objets DTO, les objets Request-Response. Alors créons-les, la classe ActualResource qui servira de demande et ActualResourceResponse qui sera une réponse. Puisque vous n'avez aucun paramètre dans une demande, le premier est trivial:

public class ActualResource 
{ 
} 

Tous les paramètres seraient des propriétés automatiques. Maintenant, la réponse:

public class ActualResourceResponse 
{ 
    public string ResourceName { get; set; } 
} 

Et la classe de service lui-même:

public class ActualResourceService : Service 
{ 
    public object Get(ActualResource request) 
    { 
     return new ActualResourceResponse { 
      ResourceName = "Hi! It's the resource name." }; 
    } 
} 

Vous pouvez bien retourner nu cours string pour vos besoins actuels, cela fonctionnerait tout de même.

Maintenant, dans le modèle ServiceStack crée, tout se passe dans le fichier AppHost.cs, nous allons jeter un coup d'oeil et de le modifier un tout petit peu:

Routes 
    .Add<Hello>("/hello") 
    .Add<Hello>("/hello/{Name*}") 
    .Add<Todo>("/todos") 
    .Add<Todo>("/todos/{Id}") //everything up to here are a template/tutorial routes, you can safely remove them 
    .Add<ActualResource>("/actualResource"); //and here you add a route to your own service 

Pour que cela fonctionne, vous devez aller à Global. asax et commenter toute la ligne WebApiConfig.Register(GlobalConfiguration.Configuration), puis allez dans la méthode RouteConfig.RegisterRoutes et ajouter:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
routes.IgnoreRoute("api/{*pathInfo}"); // <<<---- this line 
routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

Un peu plus de plomberie est nécessaire, mais il est quand même pas mal.

Maintenant, lorsque vous démarrez le service, rendez-vous sous localhost:whateverport/api/actualResource, vous obtiendrez la chaîne familière, et voici une capture d'écran: ServiceStack reply page

ServiceStack peut sérialiser à divers formats, donc si vous allez sous http://localhost:yourPort/api/actualResource?format=json, vous ll se:

{"resourceName":"Hi! It's the resource name."} 

si ?format=xml, puis:

<ActualResourceResponse> 
    <ResourceName>Hi! It's the resource name.</ResourceName> 
</ActualResourceResponse> 

Et ainsi de suite ...

Maintenant, la configuration de ServiceStack est un peu plus compliquée, mais elle prend en charge, par ex. Memcache hors de la boîte, vous pouvez utiliser Redis, vous pouvez utiliser différents fournisseurs d'authentification, tout cela peut être très utile dans certains scénarios. Mais, comme l'oncle Ben a dit une fois, « avec une grande puissance vient une grande responsabilité », et un peu plus difficile phase de configuration ...


Maintenant, vous pouvez choisir celui que vous avez envie, ces deux sont les options les plus simples en ce moment A MON HUMBLE AVIS. Bien sûr, ce n'est qu'un simple tutoriel pour vous aider à démarrer, vous aurez l'occasion d'explorer ce sujet en profondeur lorsque vous vous lancerez dans le projet.

+0

Curieux pourquoi vous pensez que ServiceStack est plus compliqué à installer? Il s'agit d'une ligne pour enregistrer votre choix de Memcached ou Redis 'ICacheClient', etc. et chaque inscription Auth Provider est une seule ligne de config. – mythz

+0

@mythz Un peu plus compliqué que le * complètement * prêt, hors de la boîte WebApi, mais (peut-être) en raison de cela plus personnalisable. Mais ne vous méprenez pas, j'utilise ServiceStack et je l'aime beaucoup - bien que vous puissiez utiliser une petite mise à jour de la documentation pour MVC 4 - par exemple. vous devez commenter complètement l'enregistrement de l'itinéraire de l'API pour que cela fonctionne - ou peut-être le modifier sur différentes routes, je ne suis pas tout à fait sûr, je n'y suis pas vraiment allé. C'est un détail mineur, je sais, mais il reste encore à faire. :) Et merci pour la correction sur la nouvelle API. –

+0

Comment WebApi peut-il être * Complètement prêt *? Que faut-il pour utiliser Redis ou Memcached? et je ne peux pas m'imaginer que les fournisseurs d'authentification différents peuvent tout simplement travailler hors de la boîte non plus? Je vais regarder dans MVC4, pourrait avoir besoin d'une mise à jour wiki docs/NuGet. – mythz

Questions connexes