2015-06-20 62 views
0

有一個網站使用C#MVC WEB API編寫Web服務,以便移動應用程序可以使用它們存儲和檢索數據。現在有一個問題,就是在其中一個方法中有一個值需要在另一個方法中使用。我需要訪問該值。我已經使用會話處理閱讀了其他人有關同一問題的答案,但這也不是一個好方法。我應該如何得到這個價值?到目前爲止,我已經做到了。將數據存儲在WEB API中以便稍後可以使用

public Object carYears(string Carmade, string CarModel) //not working 
{ 
    List<object> list = new List<object>(); 
    int? manid = Convert.ToInt32(Carmade); 
    int? modid = Convert.ToInt32(CarModel); 
    var md = db.des_texts.Where(x => x.TEX_ID == modid).SingleOrDefault(); 
    var manufac = db.manufacturers.Where(x => x.MFA_ID == manid).SingleOrDefault(); 
    var mod = (from modl in db.models 
       join mn in db.manufacturers on modl.MOD_MFA_ID equals mn.MFA_ID 
       join cd in db.country_designations on modl.MOD_CDS_ID equals cd.CDS_ID 
       join dt in db.des_texts on cd.CDS_TEX_ID equals dt.TEX_ID 
       where (mn.MFA_ID == manid) && (cd.CDS_LNG_ID == 4) && (modl.MOD_PC == 1) && (dt.TEX_TEXT == md.TEX_TEXT) 
       orderby mn.MFA_BRAND, dt.TEX_TEXT 
       select new { modl.MOD_ID, mn.MFA_BRAND, dt.TEX_TEXT, modl.MOD_PCON_START, modl.MOD_PCON_END }).FirstOrDefault(); 

    //TempData["modelid"] = mod.MOD_ID; <-- i need this value in another method 
    var session = HttpContext.Current.Session; 
    if (session != null) 
    { 
     if (session["modelid"] == null) 
      session["modelid"] = mod.MOD_ID; 

    } 

這個TempData可以用於這個目的嗎?還有一件事我已經做了會話並存儲了值,但仍然無法使用其他方法訪問此值。

+0

我覺得要麼你應該解決這個問題的服務級別或有兩個單獨的調用或實際考慮體系結構,因爲它會危及Web Api RESTful方法。 –

回答

0

在第一種方法

public Object carYears(string Carmade, string CarModel) 
    { 
//previous code 
ExampleRequest request = new ExampleRequest(); 
request.ExId = mod.MOD_ID; 
otherMethod(request); 
} 

public bool otherMethod(ExampleRequest request) { 
int modId = request.ExId; 
//otherCode 
return true; //or false 
} 
+0

otherMethod(request);將不合適,因爲這兩種方法都是從服務器返回數據,我需要在另一種方法中的MOD_ID,因爲ii必須編寫一個查詢需要此ID .. –

+0

但這個DTO類可以用來存儲該ID和我也可以在其他方法中訪問它,而無需調用該方法.. –

+0

其他方法是一個示例,因爲我不知道第二種方法的樣子。是的,你可以用同樣的方法在其他方法中使用DTo類。 – Sajal

0

你不應該依賴會話爲了這個,我不認爲創建一個DTO類作爲

public class ExampleRequest 
{ 
    public int ExId {get; set;} 
...Add more types required if any 
} 

。除非移動應用程序正在存儲ASP.NET身份驗證密鑰並將其傳遞給每個請求。對於ASP.NET MVC網站來說,這幾乎是「開箱即用」功能,但不能依賴會話來訪問移動應用程序客戶端,無論API是否應該尊重REST。我不認爲Web API和ASP.NET將確保爲同一個移動應用程序客戶端的每個請求使用相同的會話。

carYears方法可返回modelid回移動應用,otherMethod可以要求modelid作爲參數,然後將移動應用程序可以包括在未來請求到otherMethodmodelId,簽名將是:

public returnType otherMethod(int modelId){} 

否則,您otherMethod僅僅是一個私人的「幫手」的方法來調用程序,carYears,而且會對簽名,顯然不需要會話,你只是過客的modelidcarYearsotherMethod

private returnType otherMethod(int modelId){} 
+0

我在腦海裏也有這個東西,但只是問了這個問題,所以可能會有解決方法。 –

相關問題