Kurucuda hizmetleri başlattığım bir ASP.NET MVC uygulamasına sahibim. Bu hizmetler, projede başka bir .dll
işaret eder ve WCF hizmetleri değildir. Aşağıda kodumu göstermiştir:Denetleyicimin yapıcısında User.Identity.Name öğesine erişebilir miyim? Değilse, en iyi uygulama nedir?
[Authorise]
public class OrderController : Controller
{
private OrderService _orderService;
public OrderController()
{
_orderService = new OrderLogic(User.Identity.Name);
}
public ActionResult Search()
{
//do stuff here including calling _orderLogic.Search();
}
public ActionResult GetMyOrders()
{
//do stuff here including calling _orderLogic.GetMyOrders();
}
//more actions here
}
public class OrderService
{
private string _username;
public OrderLogic(string username)
{
_username = username
}
public List<Order> Search()
{
//use _username in query here
}
public List<Order> GetMyOrders()
{
//use _username in query here
}
//more methods here
}
Yukarıdaki örnekte var Sorunum OrderService
başlatmak zaman giriş yapmış olan kullanıcının adına geçmek zorunda olmasıdır. MVC lifecyle User.Identity
'un bu aşamasında null
'dur.
Kurucudaki geçerli kullanıcıya erişmenin bir yolu olduğunu sanmıyorum. Ayrıca, hizmeti her eylemde başlatmak veya geçerli kullanıcı için her yönteme geçmek istemiyorum. Bu senaryonun yaygın olduğuna eminim, en iyi uygulama nedir ve hangi seçeneklere sahibim? Bu soru bağımlılık enjeksiyon etiketiyle etiketlenmiş yana
Temel soru: Kullanıcı giriş yaptı mı? Genel olarak, adsız erişimi önlemek için Sipariş sınıfınızı veya yönteminizi [Authorize] özelliğiyle süsleyebilirsiniz. –
Kullanıcının oturum açtığını biliyorum. Denetleyicinin yapıcısında User.Identity'ye erişimim yok (bu nedenle OrderService'i başlatamıyorum). User.IDentity para cezasına eylemlerde erişebilirim. – user1786107
Hizmetinizi Controller's Initialize yönteminde başlatmayı deneyin. Bu, http://stackoverflow.com/questions/1506254/how-to-get-user-identity-name-from-a-controller yardımcı olabilir. Veya kurucunuzda bir müşteri hizmeti enjekte etmek için IoC'yi kullanın http://forums.asp.net/t/1467424.aspx?Access+to+User+Identity+in+Controller+constructor –