0

サーバー1でホストされているコードの一部を参照しているAngularJSコントローラーとサービスがあります。したがって、データを取得または投稿するには、

var getUsers = $resource('http://localhost:2211/projectname/users/getusers', 
{
    id: viewModel.user.Id
}); 

getUsers.get(function (result: users.usersResource)
{
   if(result != null)
   {
       $scope.viewModel.firstName = result.firstName; 
   }
}

私の質問は、投稿または取得を行うたびにURLをハードコーディングする代わりに、上記のURLを保持し、コントローラーまたはサービスページから呼び出すようにweb.configファイルを設定する方法です。

助けてください。

4

2 に答える 2

5

これよりも簡単な方法があります。JavaScript をカミソリから直接読み取ることができます。

_Layout.cshtml にすべてのビューの値を含めるようにしたいので、cshtml で次のようにします。

<!DOCTYPE html>
<html ng-app="WebAthena" ng-controller="AppController">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    <script>
        var WebApiBaseUri = '@System.Configuration.ConfigurationManager.AppSettings["WebApiBaseUri"]';
    </script>
</head>

スクリプトで、かみそりで c# コードを javascript に挿入できることに注意してください。また、アポストロフィ " ' " のペアで C# コードをラップしました。

コードを実行すると、JavaScript は次のようになります。

var WebApiBaseUri = 'http://localhost:40567';

このスクリプトは早期に実行されるため、angular はそれをグローバル変数として認識できます。

または、角度定数内に挿入することもできるため、上記のコード行を次のように変更します。

//var WebApiBaseUri = '@System.Configuration.ConfigurationManager.AppSettings["WebApiBaseUri"]';
app.constant("WebApiBaseUri", '@System.Configuration.ConfigurationManager.AppSettings["WebApiBaseUri"]');

これは次のように変換されます:

//var WebApiBaseUri = 'http://localhost:40567';
app.constant("WebApiBaseUri", 'http://localhost:40567');

次に、このコードをAngular Controller、Factory、Serviceなどに挿入できます

于 2015-10-12T20:59:53.023 に答える
3

私の知る限り、クライアント サイト (javascript など) から web.config 情報を取得することはできません。そのため、角度を付けて web.config を調べて URL を取得することはできません。

$ressource url のように、Angular で参照できる URL のオブジェクト/リストが必要で、URL を web.config またはコードの分離コードに格納する必要がある場合は、次を返すハンドラを作成することをお勧めします。そこから値が設定された角度定数。

解決策 1 (サーバー側)

以下に例を示します。

namespace App.Handlers
{
    public class ApiUrls : IHttpHandler
    {
        public class UrlItems
        {
            // Properties here doesn't need to be const. They can be taken from the web.config it you want to
            public string GetUsers = "http://localhost:2211/projectname/users/getusers";
            public string AddUser = "http://localhost:2211/projectname/users/add";
            public string UpdateUser = "http://localhost:2211/projectname/users/update";
        }

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/javascript";

            var serializer = new JavaScriptSerializer();
            var script = string.Format(@"
                (function() {{

                    'use strict';

                    angular
                        .module('YOUR_MODULE_NAME_HERE')
                        .constant('ApiUrls', {0});
                }})();
            ",
            serializer.Serialize(new UrlItems()));

            context.Response.Write(script);
        }
    }
}

そして、web.config のいくつかのコードを html ファイルに含めることができます。

<system.webServer>
    <handlers>
        <add path="/js/ApiUrls.js" name="App.Handlers.ApiUrls" type="App.Handlers.ApiUrls, App, Version=1.0.0.0, Culture=neutral" verb="GET" />
    </handlers>
</system.webServer>

次に、その定数をコントローラー、サービス、ファクトリーなどに注入して、そこから値を取得できます。

angular
    .module('YOUR_MODULE_NAME_HERE')
    .controller('UserController', ['ApiUrls', function(ApiUrls) {

        var getUsers = $resource(ApiUrls.GetUsers, 
        {
            id: viewModel.user.Id
        });     

    }]);

解決策 2 (クライアント側のみ)

または、より単純に、URL のリストだけが必要で、コードビハインドまたはクライアント側に保存されているかどうかを気にしない場合は、角度定数を追加して html に含め、ハンドラーを忘れてください。次に、以下のようなものを含む js ファイルを作成します。

(function() {
    'use strict';

    angular
        .module('YOUR_MODULE_NAME_HERE')
        .constant('ApiUrls', { 
            GetUsers: "http://localhost:2211/projectname/users/getusers", 
            AddUser: "http://localhost:2211/projectname/users/add", 
            UpdateUser: "http://localhost:2211/projectname/users/update" 
        });
})();

次に、ファイルをhtmlファイルに含めます

<script src="/StaticFiles/ApiUrls.js"></script>

コード内のプロパティ名を別の名前に変更した場合でも、angular でも変更する必要があることを覚えておいてください。

私が助けてくれることを願っています:)

于 2014-08-12T20:22:25.250 に答える