Nein, weil die Meldungshandler auf roher HttpRequestMessage
oder roher HttpResponseMessage
(im Falle von Fortsetzungen) arbeiten. Also wirklich, es gibt kein Konzept von "Stromregler ausgeführt" mit DelegatingHandlers
seit Nachrichtenhandler aufgerufen werden, bevor die Anfrage an die Steuerung oder (wieder im Falle von Fortsetzungen) nach dem Controller die Antwort zurückgibt.
Allerdings hängt es wirklich davon ab, was Sie versuchen zu tun.
Wenn Sie wissen möchten, auf welchen Controller die Anfrage weitergeleitet wird, können Sie den Mechanismus, der die Controller intern auswählen würde, manuell aufrufen.
public class MyHandler : DelegatingHandler
{
protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
var config = GlobalConfiguration.Configuration;
var controllerSelector = new DefaultHttpControllerSelector(config);
// descriptor here will contain information about the controller to which the request will be routed. If it's null (i.e. controller not found), it will throw an exception
var descriptor = controllerSelector.SelectController(request);
// continue
return base.SendAsync(request, cancellationToken);
}
}
Danke, ich habe eine Validierungsroutine, und es wäre nett, in der Lage zu sein, den Controller-Typ zu überprüfen, ob es ein benutzerdefiniertes Attribut definiert hat, so kann ich diese Validierungsroutine vermeiden. Dies sollte dies ermöglichen. –
großartig. Ja, Sie können das leicht tun, sobald Sie eine Instanz von HttpControllerDescriptor –
@FilipW greifen, gibt es eine "nette" Möglichkeit, dies zu tun, ohne dass es eine Ausnahme auslöst? Im Quelltext ruft der Aufruf von 'SelectController' schließlich 'this._controllerInfoCache.Value.TryGetValue (controllerName, out controllerDescriptor)' auf, aber' _controllerInfoCache' ist in keiner Weise öffentlich zugänglich – wal