2016-06-02 10 views
0

Die beiden folgenden Links zugreifen, die gleiche Aktion Methode:Wie kann ich die folgende Aktionsmethode threadsicher machen?

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

ich Request.Url.Host verwenden, um die Marke von Produkten bestimmen ich aus einer Datenbank zurückgeben möchten. Wenn ich zuerst auf http://stage.bullydog.com/Products/accessories/podmount zugreife, enthält Request.Url.Host den Wert stage.bullydog.com, aber wenn ich dann gehe zu http://stage.sctflash.com/Products/accessories/podmount, kann Request.Url.Hoststage.sctflash.com enthalten oder es kann stage.bullydog.com enthalten.

Die Aktion Methode, die aufgerufen wird, ist:

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); 
    } 

Der Code, der die Marke erhält, ist:

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; 
    } 
} 

Wie kann ich die Request.Url.Host enthält die richtige Host sicherzustellen, wenn das Verfahren gleiche Aktion ist Zugriff von zwei verschiedenen Hosts?

Sie können dies in Aktion sehen, wenn Sie zu http://stage.bullydog.com/Products/accessories/podmount gehen und gehen dann zu http://stage.sctflash.com/Products/accessories/podmount und entweder eine aktualisieren, sollte das Logo, das ändern bedeutet, dass der von Request.Url.Host falsch war zurückgegebene Wert.

Kann GetProductBrand auch statisch sein und in diesem Fall dennoch Thread-sicher sein?

+0

Sie sind zwei Anfragen richtig? Sie sollten also einzigartig sein. Ich sehe keine Statik oder irgendetwas, das sagt, dass es nicht threadsicher ist. – TyCobb

+0

@TyCobb - Die 2 URLs rufen dieselbe Controller/Aktionsmethode auf. Ich kann einfach nicht herausfinden, warum eine URL die URL der anderen zurückgibt. – xaisoft

Antwort

0

Der Grund, warum der Zugriff auf eine andere Website den Inhalt der Website zurück brachte und die Request.Url.Host die Informationen der anderen Websites hatte, war, weil ich OutPutCache[Duration=60] an der Spitze meines Controllers deklariert hatte. Wenn ich 60 Sekunden gewartet und dann aktualisiert habe, würden die korrekten Daten für jede Website zurückkehren. Sobald ich das vom Controller entfernt habe, hat alles wie erwartet funktioniert.

Verwandte Themen