2012-07-17 55 views
0

我目前在我的模型中引用了HttpContext。這是好的做法嗎?我應該傳遞一些我需要的信息嗎?模型中的mvc3 httpcontext

例如,在我的模型代碼:

public void function() 
{ 
string param = HttpContext.Current.Request.QueryString["param"]; 
if(param == "myexpectations") { ...} 
} 

Should be changed to: 

public void function(string param) //avoid hard reference this way?? 
{ 
if(param == "myexpectations") { ...} 
} 

回答

1

這是不是在你的模型引用HttpContext好的做法。你不希望你的模型和HttpContext之間的那種緊密耦合。除此之外,它會讓你的模型非常難以測試。我一定會選擇第二個選項。

如果您要在操作方法中檢索查詢字符串值,則不需要使用HttpContext.Current.Request.QueryString。您可以允許ASP.NET的綁定機制將查詢字符串值綁定到您的操作方法中的參數。例如。如果這是你的URI:

http://localhost/Home/TestQueryString?param=ThisIsATestValue 

假設你有你的路由設置正確,你可以這樣創建控制器和行動,並MVC將查詢字符串值"ThisIsATestValue"綁定到paramater param

public class HomeController : Controller 
{ 
    public ActionResult TestQueryString(string param) 
    { 
     string fromHttpContext = HttpContext.Current.Request.QueryString["param"]; 

     // result will be set to true 
     bool result = param == fromHttpContext; 
     return new EmptyResult(); 
    } 
} 
+0

嗨,你可以請解釋並提供一個鏈接到MVC綁定? – River 2012-07-18 23:53:47

+0

當然,下面是一個很好的解釋MVC模型綁定的文章:http://msdn.microsoft.com/en-us/magazine/hh781022.aspx。我不會在這裏解釋更多,因爲它有很多。我給出的例子是使用Querystring值提供程序的一個非常簡單的例子(請參閱鏈接瞭解更多信息)。 – 2012-07-19 01:29:25

+0

我很想使用MVC框架綁定HTTP參數模型(公共ActionResult TestQueryString(paramModel參數)')並在控制器中使用它。但是如何在AuthorizeAttribute中做到這一點? AuthorizeCore接受一個參數,那就是httpContext。我覺得在1997年使用這個對象編寫一個PHP web應用程序。然而,顯示如何訪問參數的示例顯示訪問原始httpcontext。特別是一串字符串會顯示爲逗號分隔的字符串,但值也有逗號,所以不知道分隔符和值中的逗號是什麼。 – HMR 2016-07-07 05:35:30