私が取り組んでいるMVC3プロジェクトでは、現在コントローラーにある多くのロジックをサービスレイヤーに移動し、WCFでRESTサービスとして公開しようとしています。
したがって、Global.asaxで、次のようなサービスルートを作成します。
RouteTable.Routes.Add(new ServiceRoute
("Exampleservice", new WebServiceHostFactory(), typeof(ExampleService)));
コントローラーは次のようなサービスにアクセスします。
public class ExampleController : Controller {
private IExampleService service;
public ExampleController() {
this.service = new ExampleService();
}
public ActionResult Index() {
var results = service.GetAll();
return View(results);
}
}
ここでの主なポイントは、サービスクラスを直接使用することです(HttpClientを使用してネットワーク経由でリクエストを行うことはありません)。
私たちのウェブサイトはWindows認証(イントラネットサイト)を使用しており、それを維持したいと考えています。私の質問は、サービスを使用するコントローラーの使用方法とWCFによるサービスの使用方法の両方で機能する、サービスクラスのユーザーIDを取得する方法はありますか?
例えば:
[ServiceContract]
public interface IExampleService
{
[WebGet(UriTemplate = "/")]
List<Results> GetAll();
}
public class ExampleService : IExampleService
{
List<Results> GetAll() {
// Get User Name Here
// In ASP.Net I would use User.Identity.Name
// If I was just worrying about the the REST service I would use
// ServiceSecurityContext.Current.WindowsIdentity.Name
}
}