在所有其他中间件之后如何拦截ASP.NET 5中的响应?

时间:2016-01-27 20:40:07

标签: asp.net-core

在我的应用程序中,我需要为几乎所有响应添加标题。

然而,中间件不会为我解决这个问题,因为其他一些中间件设置了一个完全新鲜的响应,结束了管道,我没有看到:

app.Use((context, next) =>
{
    context.Response.Headers.Add("MyHeader", "IsCool");
    return next();
});

app.UseSomeOtherMiddleware(); // This ends the pipeline after removing my `MyHeader`

我无法在违规的中间件之后添加另一个中间件,因为管道已经完成。

我可以为它添加web.config条目:

                                                       

但正如我所说,这需要添加到几乎所有响应中。我只需要一点点逻辑来确定我是否添加它,web.config解决方案不能提供给我。

那么我怎么能在ASP.NET 5中这样做呢?在完成一切后,我怎样才能进入管道?

3 个答案:

答案 0 :(得分:3)

正确实施RC2

<script>
    var map;
    function initialize() {
    var center = new google.maps.LatLng(37.422, -122.084058);
    map = new google.maps.Map(document.getElementById('map'), {
    center: center,
    zoom: 13
        });

    var request = {
        location: center,
        radius: 8047,
        types: ['restaurant']
    };

    var service = new google.places.PlaceService(map);

    service.nearbySearch(request, callback);
    }

    function callback(results, status) {
        if(status == google.maps.places.PlacesServiceStatus.OK){
            for (var i = 0; i < results.length; i++) {
                createMarker(results[i]);
            }
        }
    }

    function createMarker(place) {
        var placeLoc = place.geometry.location;
        var marker = new google.maps.Marker({
            map: map,
            position: place.geometry.location
        });

    }

    google.maps.event.addDomListener(window, 'load', initialize);
    </script>

答案 1 :(得分:2)

您可以使用HttpContext.Response.OnStarting注册回调,并在发送之前修改标题。

答案 2 :(得分:-1)

我想我通过创建如下的中间件解决了这个问题:

public class MyMiddleware
{
    RequestDelegate _next;

    public MyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        await _next(context);
        context.Response.Headers.Add("MyHeader", "IsCool");
    }
}

Startup.cs中使用以下内容:

app.UseMiddleware<MyMiddleware>();