2016-06-02 5 views
0

Следующие две ссылки доступ к тому же методу действия:Как я могу сделать следующий метод действий потоком безопасным?

http://stage.bullydog.com/Products/accessories/podmount и http://stage.sctflash.com/Products/accessories/podmount

я использую Request.Url.Host, чтобы определить марку продуктов, которые я хочу, чтобы вернуться из базы данных. Когда я сначала получаю http://stage.bullydog.com/Products/accessories/podmount, Request.Url.Host содержит значение stage.bullydog.com, но если я затем перейду к http://stage.sctflash.com/Products/accessories/podmount, Request.Url.Host может содержать stage.sctflash.com или может содержать stage.bullydog.com.

метод действия, который называется это:

public ActionResult GetAccessoriesByType(RenderModel model, string id) 
    { 
     Common _common = new Common(); 
     string brand = Request.Url != null ? _common.GetProductBrand() : BrandType.SCT; 

     var productSearchResultsModel = new ProductSearchResultsModel 
     { 
      Accessories = _accessoryRepository.GetAccessoriesByType(id, brand) 
     }; 

     return View("~/Views/accessories.cshtml", productSearchResultsModel); 
    } 

код, который получает бренд:

public class Common 
{ 
    public string GetProductBrand() 
    { 
     var host = HttpContext.Current.Request.Url.Host; 

     if (host.Contains("sctflash")) 
      return BrandType.SCT; 

     if (host.Contains("bigrig") || host.Contains("bigrigs")) 
      return BrandType.BigRig; 

     if (host.Contains("bullydog")) 
      return BrandType.BullyDog; 

     return BrandType.SCT; 
    } 
} 

Как я могу гарантировать, что Request.Url.Host содержит надлежащего хозяина, когда метод же действия доступ с двух разных хостов?

Вы можете увидеть это в действии, если вы идете в http://stage.bullydog.com/Products/accessories/podmount, а затем перейти к http://stage.sctflash.com/Products/accessories/podmount и обновить либо один, логотип должны изменить это означает, что значение, возвращаемое Request.Url.Host неверно.

Кроме того, может ли GetProductBrand быть статическим и по-прежнему быть потокобезопасным в этом случае?

+0

Это два запроса, верно? Поэтому они должны быть уникальными. Я не вижу никакой статики или чего-либо, что говорит, что это не потокобезопасно. – TyCobb

+0

@TyCobb - 2 URL-адреса называют один и тот же контроллер/метод действий. Я просто не могу понять, почему один URL-адрес возвращает URL-адрес другого. – xaisoft

ответ

0

Причина, по которой доступ к другому сайту привел к возврату содержимого одного веб-сайта, а информация о других веб-сайтах была связана с тем, что я указал OutPutCache[Duration=60] в верхней части моего контроллера. Если бы я подождал 60 секунд, а затем обновился, вернутся правильные данные для каждого веб-сайта. Как только я удалил это из контроллера, все работало так, как ожидалось.

Смежные вопросы