#c#
#c#
Вопрос:
У меня есть бизнес-уровень, настроенный как другой проект C # в моем решении, мне нужно вызвать HttpContext, но независимо от того, что я пытаюсь, я не могу заставить его правильно ссылаться.
Я безуспешно пытался заставить Visual Studio подобрать необходимую ссылку, и я также попытался поместить ссылку на System.Веб вручную, но, похоже, это не работает.
Я также заметил, что сессия также не найдена.
Ниже приведен фрагмент кода, который я использовал
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
namespace BussinessLayer
{
class UserPermissions
{
public void redirectToLogin()
{
if (Session["user"] == null)
{
HttpContext.
if (HttpContext.Current.Request.Cookies["userName"] == null)
{
HttpContext.Current.Response.Redirect("/login.aspx");
}
}
}
}
}
Кто-нибудь знает, почему HttpContext или Session не найдены?
Комментарии:
1. Когда вы говорите «ссылка», вы имеете в виду, что получаете ошибку компилятора? Или HttpContext.Current возвращается как null?
Ответ №1:
Это связано с таргетингом на профиль клиента .NET 4. Вы сможете исправить это, перенацелив свой проект на полную .NET Framework 4.
Ответ №2:
HttpContext.Current не подходит для делового уровня, вместо этого вы можете использовать HttpContextBase
public static class HttpContextHelper {
private static object lockObj = new object();
private static HttpContextBase mockHttpContext;
/// <summary>
/// Access the HttpContext using the Abstractions.
/// </summary>
public static HttpContextBase Current {
get {
lock (lockObj) {
if (mockHttpContext == null amp;amp; HttpContext.Current != null) {
return new HttpContextWrapper(HttpContext.Current);
}
}
return mockHttpContext;
}
set {
lock (lockObj) {
mockHttpContext = value;
}
}
}
}
Ответ №3:
Вам нужно ссылаться System.Web.dll который можно найти в GAC (мой VS2010 не показывает его в «Ссылках на .NET», поэтому мне пришлось добавить его вручную).
Также, если вы разделяете бизнес-уровень, может быть разумно сделать его более независимым, более слабо связанным.
Ответ №4:
Вам действительно, по-настоящему, честно не нужно ссылаться HttpContext
на свой бизнес-уровень. Если вы это сделаете, то это больше не бизнес-уровень. Это часть уровня представления с жестко запрограммированной зависимостью от механизма представления.
Любое значение, необходимое из HttpContext
, должно быть передано объекту бизнес-уровня при вызове уровнем представления.