4

サーバーからJSを使用してリソースに到達することになっています。以下のコードを設定しました。

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

ただし、反対側のメソッドをどのように作成する必要があるのか​​わかりません。私は次の提案を思いつきましたが、それが機能していないことを十分に認識しています。たとえば、適切な属性が欠落していると確信しています。メソッドが反応することになっている場所をどこに設定すればよいかさえわかりませんactualResourceName...

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

グーグルで検索しましたが、解決策が見つかりませんでした。でも、何か便利なことに気づかずに偶然見つけたかもしれません。

C#のメソッドはどのように書く必要がありますか?

4

1 に答える 1

5

では、どうぞ。それを行うための 2 つの方法を説明します。最も簡単な方法は次のとおりです。

1. ASP.NET ウェブ API

新しい ASP.NET MVC4 プロジェクト (リリースまたは RC) を作成し、オプションとして「WebApi」を選択する必要があります。 プロジェクトの立ち上げ

そして、テンプレートを準備します。'Controllers' フォルダを右クリックし、[追加] -> [コントローラ] を選択します。 ここに画像の説明を入力

次のように入力します。

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

デフォルト ルートは Global.asax にありWebApiConfig.Register(...)ます。メソッドの定義に移動すると、デフォルト ルートが であることがわかりますhost/api/controller。プロジェクトを起動して下に移動すると(私の場合、ポートは開発サーバーによって自動的に選択されます) 、次のhttp://localhost:23030/api/ActualResource ようになります。

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

WebApi は、ヘッダーに応じて JSON または XML を返します。JSONAcceptを唯一のデフォルトにする場合は、このリンクを参照してください。

もちろん、クラスを作成して返すこともできます。クラスは、以下の ServiceStack と同様の方法で XML/JSON にシリアル化されます。


2.サービススタック

現在、ServiceStack は強力なオープンソースの REST Web サービス フレームワークです。WebApi とは動作が少し異なります。簡単に紹介します (ただし、ドキュメントは適切です)。

通常の ASP.NET MVC プロジェクト (私の場合は MVC4) を作成します。空のテンプレートが作成されます。

サービス スタック スタートアップ プロジェクト

次に、パッケージ マネージャー コンソールを起動し、(ドキュメントが示唆するように) と入力しInstall-Package ServiceStack.Host.Mvcます。これにより、チュートリアル アプリを含む ServiceStack プロジェクト テンプレートが取得され、必要に応じて後で削除できます。

しかし、まず最初に、ServiceStack は DTO (Request-Response オブジェクト) で機能します。それでは、リクエストとして機能し、レスポンスとなるActualResourceクラスを作成しましょう。ActualResourceResponseリクエストにはパラメーターがないため、最初のパラメーターは簡単です。

public class ActualResource
{
}

パラメータはすべて自動プロパティになります。今応答:

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

そしてサービスクラス自体:

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

stringもちろん、現在の目的のために裸に戻すこともできますが、それはまったく同じように機能します。

ServiceStack が作成するテンプレートでは、すべてが AppHost.cs ファイルで行われます。これを見て、少し変更してみましょう。

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

WebApiConfig.Register(GlobalConfiguration.Configuration)これを機能させるには、Global.asax に移動して行全体をコメントアウトし、RouteConfig.RegisterRoutesメソッドに移動して次を追加する必要があります。

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

もう少し配管が必要ですが、それでも悪くありません。

サービスを開始すると、 の下に移動するlocalhost:whateverport/api/actualResourceと、おなじみの文字列が表示されます。これがスクリーンショットです。 ServiceStack 返信ページ

ServiceStack はさまざまな形式にシリアル化できるため、 の下http://localhost:yourPort/api/actualResource?format=jsonに移動すると、次のようになります。

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

の場合?format=xml:

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

等々...

現在、ServiceStack のセットアップはもう少し複雑ですが、Memcache などをすぐにサポートし、Redis で plumb でき、さまざまな認証プロバイダーを使用できます。これらはすべて、シナリオによっては非常に役立つ場合があります。しかし、ベンおじさんがかつて言ったように、「大きな力には大きな責任が伴います」、そして少し難しいセットアップ段階...


好きな方を選択できるようになりました。現時点では、これらの 2 つは最も単純なオプションです。もちろん、これは開始するための簡単なチュートリアルにすぎません。プロジェクトを開始するときに、このトピックを詳しく調べる機会があります。

于 2012-11-09T15:47:19.983 に答える