«HttpRequest» не содержит определения «Browser» в nopcommerce 4.2. - PullRequest
0 голосов
/ 14 июня 2019

Я получаю ошибку заголовка. Вот полная ошибка показывает

«HttpRequest» не содержит определения «Браузер», и нет доступного метода расширения «Браузер», принимающего первый аргумент типа «HttpRequest» (вы пропустили директиву using или ссылку на сборку? )

Теперь, эта ошибка показывает мне, когда я пишу код для проверки работы сайта на компьютере или мобильном .

Я пытаюсь дать ссылку также для HTTPRequest, но я не нашел в nuget package

Вот код моего контроллера,

public ActionResult MobileBrowser()
{
    var browser = Request.Browser;
    System.Web.HttpBrowserCapabilitiesBase myBrowserCaps = browser;
    if (((System.Web.HttpBrowserCapabilitiesBase)myBrowserCaps).IsMobileDevice)
    {
        ViewBag.Message = "mob";
    }
    else
    {
        ViewBag.Message = "web";
    }
    return PartialView();
}

Теперь я получаю красную линию в var browser = Request.Browser;, System.Web.HttpBrowserCapabilitiesBase myBrowserCaps = browser; и if (((System.Web.HttpBrowserCapabilitiesBase)myBrowserCaps).IsMobileDevice)

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Вы можете попробовать это -

  1. Без внедрения : Контроллер имеет объект запроса, который имеет тип HttpRequest, он содержит тип заголовка IHeaderDictionary, откуда вы будете иметь информацию браузера.
    public class UploadFileController : Controller
           {
                [HttpGet]
                public IActionResult Photo()
                {
                      var brows = Request.Headers["User-Agent"].ToString();

                      return View();
                }

                [HttpPost]
                public IActionResult Photo(UserViewModel userViewModel)
                {
                        if (ModelState.IsValid)
                        {
                        }
                     return View(userViewModel);
               }
          }
IHttpContextAccessor Inject в контроллере : необходимо добавить одноэлементную службу типа, указанного в классе запуска, метод конфигурации services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();.Теперь вы готовы ввести в контроллер -
     public class UploadFileController : Controller
            {
                private readonly IHttpContextAccessor httpContextAccessor;
                public UploadFileController(IHttpContextAccessor  httpContext)
                {
                    this.httpContextAccessor = httpContext;
                }

                [HttpGet]
                public IActionResult Photo()
                {
                    var browser = httpContextAccessor.HttpContext.Request.Headers["User-Agent"].ToString();

                    return View();
                }

                [HttpPost]
                public IActionResult Photo(UserViewModel userViewModel)
                {
                    if (ModelState.IsValid)
                    {
                    }
                    return View(userViewModel);
                }
            }
IHttpContextAccessor Inject в представлении : если вы хотите иметь информацию о браузере в представлении, которое необходимо добавить в классе запуска, метод конфигурации services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); и внедрить IHttpContextAccessor.
 @inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor

      @{
          ViewData["Title"] = "Upload Picture";

          var browser = HttpContextAccessor.HttpContext.Request.Headers["User-Agent"].ToString();
      }
0 голосов
/ 14 июня 2019

В nopCommerce они предоставляют тот сайт, который используется на мобильном устройстве или не использует нижеуказанный сервис

 /// <summary>
    /// Get a value indicating whether the request is made by mobile device
    /// </summary>
    /// <returns></returns>
    public virtual bool IsMobileDevice()
    {
        if (_httpContextAccessor?.HttpContext == null)
            return false;

        //we put required logic in try-catch block
        //more info: https://www.nopcommerce.com/boards/t/17711/unhandled-exception-request-is-not-available-in-this-context.aspx
        try
        {
            //we don't parse browscap library here
            //in 99% of cases it's enough to use the approach suggested by http://detectmobilebrowsers.com/

            var userAgent = _httpContextAccessor.HttpContext.Request.Headers[HeaderNames.UserAgent].ToString();
            var mobile = _firstMobileDeviceRegex.IsMatch(userAgent) || _secondMobileDeviceRegex.IsMatch(userAgent.Substring(0, 4));
            return mobile;
        }
        catch
        {
            // ignored
        }

        return false;
    }

Или вместо браузера запросов вы можете использовать это

var userAgent = _httpContextAccessor.HttpContext.Request.Headers[HeaderNames.UserAgent].ToString();

Так что это наверняка будет полезно

Надеюсь, это поможет вам

Спасибо

...