Хранение данных в WEB API, чтобы его можно было использовать позже

114
17

Существует веб-сайт, для которого я пишу веб-службы, используя С# MVC 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 использоваться для этой цели? Еще одна вещь, которую я сделал в сессии и сохранил значение, но все же я не могу получить доступ к этому значению в другом методе.

спросил(а) 2015-06-20T19:55:00+03:00 5 лет, 3 месяца назад
1
Решение
105

Вы не должны полагаться на сеанс для этого, я не думаю. Если мобильное приложение не хранит ключ аутентификации ASP.NET и передает его с каждым запросом. Для веб-сайта ASP.NET MVC это почти "из коробки", но вы не можете полагаться на сеанс для клиента мобильного приложения, независимо от того, должен ли API уважать REST или нет. Я не думаю, что веб-API и ASP.NET будут гарантировать, что будет использоваться тот же сеанс для каждого запроса одного и того же клиента мобильного приложения.

Метод carYears может вернуть modelid обратно в мобильное приложение, otherMethod может потребовать modelid в качестве параметра, а затем мобильное приложение может включать modelId в следующий запрос к otherMethod, подпись будет:

public returnType otherMethod(int modelId){}

В противном случае ваш otherMethod будет только частным методом "помощника" для вызывающего, carYears и будет иметь подпись, очевидно, нет необходимости в сеансе, поскольку вы просто передаете modelid в carYears otherMethod.

private returnType otherMethod(int modelId){}

ответил(а) 2015-06-20T20:18:00+03:00 5 лет, 3 месяца назад
41

Создайте класс DTO как

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
}

ответил(а) 2015-06-20T20:09:00+03:00 5 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема