Ich habe eine Web API und Mvc 5 für dasselbe Projekt. Das Web Api ist mit Inhaber Token geschützt (aber ich bemerkte die SuppressDefaultHostAuthentication Linie, so kann ich die api von Browser zugreifen, wenn ich mit Cookie mvc authentifiziert bin)Rufen Sie eine Web-API von MVC-Controller (Cookie-Authentifizierung)
Jetzt bin ich versucht, die api von einem Mvc-Controller für den Zugriff auf ohne das Token zu senden, ist das mit SuppressDefaultHostAuthentication möglich?
Versuchte, dass ohne Erfolg (401 Fehler):
HttpClientHandler handler = new HttpClientHandler()
{
PreAuthenticate = true,
UseDefaultCredentials = true
};
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri("http://localhost:11374/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync("api/MyApi").Result;
if (response.IsSuccessStatusCode)
{ }
}
Wenn es nicht möglich ist, wie der beste Weg, um dieses Problem zu umgehen?
Technisch gesehen könnte das funktionieren, aber nur, weil ein Controller wie eine reguläre Klasse instanziiert wird (statt die Request-Pipeline zu durchlaufen) einige Attribute wie 'Authorize' umgeht (da es im Kontext der Request-Pipeline funktioniert) . Wenn Sie es auf diese Weise tun, werden Sie jedoch Probleme bekommen, wenn Sie sich auf die Authentifizierung (d. H. "Benutzer") in der Aktion verlassen. –
Es wäre viel besser, den Code in den Web-API-Aktionen in eine Klassenbibliothek herauszufiltern, die dann sowohl das Web-API- als auch das MVC-Projekt nutzen kann, anstatt zu versuchen, die Web-API direkt außerhalb der Anforderungs-Pipeline zu verwenden. –