Sie können versuchen, einen Aktionsfilter in Ihrem Controller zu verwenden. Versuchen Sie eine Überschreibung hinzufügen, die so etwas wie this-
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
// some condition code to target a specific method in the controller
// Example
if (filterContext.ActionDescriptor.ActionName == "getuser") // <-- your method
{
// put your token based authentication code here
}
base.OnActionExecuting(filterContext);
}
Die OnActionExecuting Methode ist im Steuerungsbereich sieht, so dass Sie unterschiedliche Logik für unterschiedliche Steuerungen haben.
Es gibt auch eine OnActionExecuted-Methodenüberschreibung, wenn Sie Code nach Ihrer Aktionsmethode ausführen möchten.
------ bearbeiten --------------
Soweit wo Ihr Httpclient-Code-Schnipsel zu platzieren, können Sie this-
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpClient httpClient = new HttpClient();
string baseUrl = "http://localhost:60477/";
dynamic token = Session["token"];
if (token.AccessToken != null)
{
httpClient.DefaultRequestHeaders.Add(
"Authorization",
string.Format("Bearer {0}", token.AccessToken)
);
httpClient.BaseAddress = new Uri(baseUrl);
}
if(filterContext.ActionParameters.ContainsKey("httpClient"))
{
filterContext.ActionParameters["httpClient"] = httpClient;
}
else
{
// error
}
base.OnActionExecuting(filterContext);
}
versuchen
So wird das HttpClient-Objekt zusammen mit der Zuweisung Ihrer baseUrl in OnActionExecuting eingerichtet. Dieser Code wird vor jeder Methode ausgeführt, die ein ActionResult in dem von Ihnen refactorisierten Controller zurückgibt. Wenn Sie auf einige und nicht auf alle Methoden abzielen möchten, lesen Sie das erste Beispiel von OnActionExecuting oben.
public ActionResult getuser(UserModel user, HttpClient httpClient)
{
HttpResponseMessage response = httpClient.GetAsync("api/Admin/GetStates").Result;
if(response.IsSuccessStatusCode)
{
string stateInfo = response.Content.ReadAsStringAsync().Result;
}
// the rest of your code for getuser..
return View();
}
Jetzt ist Ihre getUser Methode hat einen zusätzlichen Parameter (Httpclient Httpclient).
Wie kann ich den Token-basierten Code dort platzieren – SivaRajini
Siehe die Änderungen zu meinem Beitrag. Auch das Einbringen eines Dienstes, wie Ilya Chernomordik vorgeschlagen hat, ist ebenso ideal wie Dannys Vorschlag, Hilfsmethoden zu verwenden.Mein Vorschlag ist vielleicht nicht der beste, aber wenn Sie Action Filter exporieren wollen, dann versuchen Sie es. Der zu Ihren Methoden hinzugefügte HttpClient-Parameter könnte in ein Serviceobjekt zur Injektion mit dem Code in der OnActionExecuting-Override-Methode, die in das Serviceobjekt verschoben wurde, neu strukturiert werden. Ich hoffe, das hilft! – alphaneer