1

しばらく前に、asp.net Web-api ベータ版を使用して API を構築しました。IIS でホストされている場合、web-api は実行中の Web アプリケーションから ID を継承することをどこかで読みました。私のAPIもWebサイト内で実行されています。ベータ バイナリを使用すると、サイトにログインして移動するhttp://localhost:4343/webui/api/valuesと、ログインしているユーザーの正しい値が返されます。Getこれが値コントローラーのメソッドです。

public IQueryable<string> Get()
        {
            var pr = Request.GetUserPrincipal();
            var username = Request.GetUserPrincipal().Identity.Name; //Null reference exception after installing vs 2012 here. Identity is null even though I am logged in 
            var values = GetUserValues(username);
            return values.AsQueryable();
        }

以前は web-api のベータ ビルドでは正常に動作していましたが、vs2012 の最終リリースでは null 参照例外がスローされます。代わりに .net 4.5 を使用するようにサイトを変換しました。ここで何が起こっているか分かりますか?

4

2 に答える 2

5

ApiControllerには、IPrincipalである「User」というプロパティがあります。

var pr = User.Identity.Name;

内部的には、Tugberkが言及しているように、UserプロパティはThread.CurrentPrincipalを呼び出します。

于 2012-08-28T14:05:00.537 に答える
1

HttpRequestMessageなどのメソッドや拡張機能はありませんGetUserPrincipal。ベータ版にそれがあったかどうかはわかりません。あなたの質問から理解したように、あなたのアプリはまだベータ版で実行されていますが、これは完全な災害 IMO です。

VS 2012 をインストールすると、Web API アセンブリがマシン上で GAC 処理されます。そのため、そこで競合が発生する可能性が非常に高くなります。

一方、次のコマンドを使用して ID を取得できます。

var principal = Thread.CurrentPrincipal;
于 2012-08-28T12:57:07.347 に答える