以下两个链接访问相同的操作方法:
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 :(得分:0)
访问其他网站的原因是带回一个网站内容而Request.Url.Host
有其他网站信息是因为我在控制器顶部声明了OutPutCache[Duration=60]
。如果我等待60秒然后刷新,则每个网站的正确数据将返回。一旦我从控制器中删除了它,一切都按预期工作。