在WEB API中存储数据,以便以后使用

时间:2015-06-20 16:55:37

标签: c# asp.net-mvc asp.net-web-api

我正在使用C#MVC WEB API编写Web服务的网站,以便移动应用程序可以使用它们来存储和检索数据。现在有一个问题,在其中一个方法中有一个值,我必须在另一个方法中使用。我需要访问该值。我已经使用会话处理阅读了其他人关于同一问题的答案,但这也不是一个好方法。我应该如何获得这个价值?到目前为止,我已经做到了这一点。

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可以用于此目的吗?还有一件事是我在其中创建了会话和存储的值,但我仍然无法在其他方法中访问此值。

2 个答案:

答案 0 :(得分:0)

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

在第一种方法中

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
}

答案 1 :(得分:0)

你不应该依赖会话这个我不认为。除非移动应用程序存储ASP.NET身份验证密钥并将其与每个请求一起传递。对于ASP.NET MVC网站,这是一个几乎“开箱即用”的功能,但您不能依赖于移动应用客户端的会话,无论API是否应该尊重REST。我不认为Web API和ASP.NET将确保将使用相同移动应用客户端的每个请求的相同会话。

carYears方法可以将modelid返回给移动应用,otherMethod可以要求modelid作为参数,然后移动应用可以包含{ {1}}在modelId的下一个请求中,签名为:

otherMethod

否则,您的public returnType otherMethod(int modelId){} 只是调用方otherMethod的私有“帮助方法”,并且会有签名,显然不需要会话,因为您只是传递了carYearsmodelidcarYears

otherMethod