SharePointでホストされているWCFのSPContextからSPWebを取得します
-
10-12-2019 - |
質問
私はSharePointでWCFサービスを作成および展開しており、jQueryを使用して要求を送信しています。サブサイトを除いてすべてがうまく機能しています。
これら2つのサービスURLを持っているとしましょう:
- http://localhost:1111/_vti_bin...../MethodName
- http://localhost:1111/subsite/_vti_bin...../MethodName
.
これら2つのURLを使用すると、SPContext.Current.Site
は同じで正しいです。
しかし、SPContext.Current.Web
は正しくないのです。2番目のURLの使用SPWeb
オブジェクトは、ルートWebではなくサブWebである必要があります。
サブサイトをSPWeb
オブジェクトとして取得する方法は?Web URLをWCFメソッドにパラメータとして常に渡す必要がありますか?
解決
検索後、SPContext.Current.Web
は常にRootWeb
を返すので、特定のサブWebのURLが必要です。
SPWEBオブジェクトが必要なすべてのWCFメソッドにSPWEB URLを渡すことを避けるために、次のことができます。
ASP.NETのComatibilityモードでWCFサービスを実行しています。このプロパティは、ドメイン名の後にURL文字列内のすべてのものを返します。次に、サブWeb相対URLを取得し、それをHttpContext
メソッドに渡すためにこの文字列を切り捨てることができます。
例:
クライアント側でjQuery Ajax呼び出しのURL引数は次のとおりです。
.
http://localhost:1111/subsite/_vti_bin...../MethodName
サーバー側でHttpContext.Current.Request.RawUrl
を使用している場合は、
.
/subsite/_vti_bin...../MethodName
その後、この文字列を切り捨てた後、OpenWeb()
をHttpContext.Current.Request.RawUrl
メソッドに渡します。
他のアイデアは大いに感謝されています。
他のヒント
私は同じケースを持っていました。しかし、私はここからURLを取りました:
Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;
.
だから私はSPSiteオブジェクトを作成することができました:
using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{
//your code
}
.