Comments (5)
@swettstein AspNetCore registration is also an extension using the same hook as your example. We offer no ordering control for this way of registering middleware, so this would be a new feature to offer that ability via the attribute route.
For now, if you need to control the middleware timing, users will need to register it during ConfigureFunctionsWorkerDefaults
callback - as that will happen after extension middleware is automatically registered.
from azure-functions-dotnet-worker.
controlling the order of extension middleware would be a nice feature but there is some complexity there and probably not necessary in this case.
the AspNetCore extension doesn't use WorkerExtensionStartup but rather depends on users correctly applying an extension method from FunctionsHostBuilderExtensions. none of the other built-in extensions operate this way so why is this one different?
why couldn't the AspNetCore extension be internally smarter about how it gets registered by ensuring that its middleware gets inserted first?
from azure-functions-dotnet-worker.
Keeping this item in the backlog, as it is a valid request/gap, but this is low priority and there are no plans to have this worked on at the moment.
from azure-functions-dotnet-worker.
the AspNetCore extension doesn't use WorkerExtensionStartup but rather depends on users correctly applying an extension method from FunctionsHostBuilderExtensions. none of the other built-in extensions operate this way so why is this one different?
The reason for this comes down to needing access to the IHostBuilder
, which WorkerExtensionStartup
does not offer.
why couldn't the AspNetCore extension be internally smarter about how it gets registered by ensuring that its middleware gets inserted first?
For the same reason other extensions do not control order of middleware: there is no API for that. The extension only accesses public APIs from our worker assemblies, so it has no more privilege at setting a middleware first than any other extension does.
Addressing both of these points would require a non-trivial overhaul of some of our public APIs - which is not a priority at this point.
from azure-functions-dotnet-worker.
The reason for this comes down to needing access to the
IHostBuilder
, whichWorkerExtensionStartup
does not offer.
Some of it needs access to IHostBuilder
but adding the FunctionsHttpProxyingMiddleware
does not. It happens in an extension of IFunctionsWorkerApplicationBuilder
which is accessible from WorkerExtensionStartup
. regardless, with no guaranteed ordering of loading Extension Startups, the only way to guarantee my custom middleware is after the proxying middleware is to register it in ConfigureFunctionsWebApplication
like i've already done for the workaround above.
i agree setting middleware priority would be non-trivial, especially when some of them are anonymous delegates. but what may be easier to do is priority of WorkerExtensionStartup
through additional properties on the WorkerExtensionStartupAttribute
. either way it's not high on your priority list.
ultimately if i'm creating an extension that's dependent on another extension, i would like to control the timing/ordering within my extension rather than depending on end users to get it right.
from azure-functions-dotnet-worker.
Related Issues (20)
- [Throughput Testing] .NET 8 in-proc Windows apps HOT 9
- Graceful shutdown of a QueueTrigger function via observing the CancellationToken HOT 2
- HTTP body conversion will throw an InvalidOperationException when the request have an empty body HOT 1
- [1ES] Investigate dotnet-host.public pipeline windows artifact build issue
- [1ES] Remove `_manifest` folder from FunctionsNetHost nuget payload
- CORS error in Azure Func with Linux Flex Consumption HOT 6
- Inheriting FunctionAttribute not supported? HOT 4
- Error: 'Having multiple overloads of method 'Configure' is not supported.' after upgrading .NET 6.0 to .NET 8.0 using Upgrade Assistant HOT 1
- HttpTrigger GET parameters not mapped to custom class in .NET 8 and isolated HOT 1
- .NET 8 Isolated Logging to Application Insights I can't change LogLevel from Azure Environment Variables
- .NET 8 Isolated function do not startup on Azure environment HOT 2
- Is it possible to disable automatic abandoning of service bus messages? HOT 4
- Kafka Trigger Avro Deserialization for isolated model
- Replacement for ILifeCycleNotificationHelper in Isolated Worker Process
- IFunctionBindingsFeature is internal and pevent unit testing in middleware
- ExtensionStartupRunnerGenerator generating code which conflicts with customer code (namespace)
- Update to Microsoft.Azure.Functions.Worker.Core version 1.18 breaks Open Telemetry Tracing for .net8 isolated function HOT 3
- Azure function with QueueTrigger fails to pass whitesource scan (Azure Identity Libraries and Microsoft Authentication Library Elevation of Privilege Vulnerability)) HOT 2
- CosmosDBInput returning 500 instead of 404 when item does not exist HOT 3
- ServiceBusOutput does not support byte[] as claimed HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from azure-functions-dotnet-worker.