Angular js kullanarak benzer bir sorunla karşılaştım ve sorunu çözmek için biraz farklı bir yaklaşım kullandım.
Owin'i SPA (index.html) giriş noktasına bir rota eşlemek için kullandık. Bu, SPA'ya erişmenizi ve farklı sayfalara gitmenizi sağlar. Ancak, sayfayı yeniledikten sonra 404 elde edersiniz. Esasen, AngularJS'nin yönlendirme ve Owin/Katana'nın yönlendirmesi, birbirlerinin ayak parmaklarına basıyordu.
Özel bir DelegatingHandler oluşturarak bu sorunu çözdüm. Bu temsilci işleyici, Owin/Katana isteğiyle eşleşen bir yol bulamadığında kullanılır (404).
public class CustomDelegatingHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
Task<HttpResponseMessage> response = base.SendAsync(request, cancellationToken);
if (response.Result.StatusCode == HttpStatusCode.NotFound)
{
response.Result.Content = new StringContent(File.ReadAllText(@"index.html"));
response.Result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
response.Result.StatusCode = HttpStatusCode.OK;
}
return response;
}
}
biz isteği eşleşen bir sayfa bulamıyorsanız döner index.html yukarıdaki pasajı, SPA'nın giriş noktası. Bu delegating işleyicisi kullanmak için
, kendi HttpConfiguration için aşağıdaki satırı eklemeniz gerekir (Owin konak başlatırken): Kısaca
var httpConfig = new HttpConfiguration();
httpConfig.MessageHandlers.Add(new CustomDelegatingHandler());
, ben SPA eşleştiren varsayılan bir yolu, ve tanınmayan herhangi bir yol DelegatingHandler'dan geçecek ve aynı SPA'ya hizmet edecektir. Request.Path'i değiştirmeyiz ve SPA'nın talebi doğru sayfaya yönlendirmesini sağlarız.
Bu nedenle, sunucuya herhangi bir URL'nin statik dosya ara katman yazılımını kullanarak index.html sunacak şekilde yönlendirilmesini istiyorsunuz? – khellang
Evet, herhangi bir rota (veya '/ app/*' ile eşleşen herhangi bir yol) 'index.html' dosyasını döndürür. –