相关疑难解决方法(0)

HTTP中缓存控制标头的最大值

我正在使用Amazon S3为我的网站提供静态资产.我想让浏览器尽可能长时间地缓存这些资产.我应该在资产中包含哪些元数据标头

Cache-Control: max-age=???
Run Code Online (Sandbox Code Playgroud)

caching http cache-control http-headers

69
推荐指数
3
解决办法
5万
查看次数

如何使用动作过滤器和HttpResponseMessage在Web API中使用ETag

我有一个ASP.Net Web API控制器,它只返回用户列表.

public sealed class UserController : ApiController
{
    [EnableTag]
    public HttpResponseMessage Get()
    {
        var userList= this.RetrieveUserList(); // This will return list of users
        this.responseMessage = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ObjectContent<List<UserViewModel>>(userList, new  JsonMediaTypeFormatter())
        };
        return this.responseMessage;
       }
}
Run Code Online (Sandbox Code Playgroud)

和一个动作过滤器属性类EnableTag,负责管理ETag和缓存:

public class EnableTag : System.Web.Http.Filters.ActionFilterAttribute
{
    private static ConcurrentDictionary<string, EntityTagHeaderValue> etags = new ConcurrentDictionary<string, EntityTagHeaderValue>();

    public override void OnActionExecuting(HttpActionContext context)
    {
        if (context != null)
        {
            var request = context.Request;
            if (request.Method == HttpMethod.Get)
            {
                var …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

17
推荐指数
4
解决办法
2万
查看次数

从.Net Core 2.0中的IActionFilter获取HttpStatus代码

我在ASP.NET核心2.0中有过滤器属性,请参阅下面的我的代码片段.这里的问题是我总是得到状态码是200.

即使实际状态代码是500,那么我也得到200.如何获得实际状态代码?

public void OnActionExecuted(ActionExecutedContext context)
{
    try
    {
        var controller = context.Controller as APIServiceBase;
        var statusCode = controller.Response.StatusCode;
        ..
        ..
    }
    catch { }

}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-webapi asp.net-core-2.0

5
推荐指数
2
解决办法
732
查看次数

中间件清除响应内容

在管道的顶部Startup.Configure,我创建了一个自定义中间件,它处理我的 asp net core 应用程序的错误,如下所示:

public class ErrorHandlerMiddleware
{
    private readonly RequestDelegate _next;

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

    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception)
        {
            if (context.Response.StatusCode != (int)HttpStatusCode.ServiceUnavailable && context.Response.StatusCode != (int)HttpStatusCode.InternalServerError)
            {
                context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            }
        }
        finally
        {
            if (context.Response.StatusCode / 100 != (int)HttpStatusCode.OK / 100)
            {
                string message = ((HttpStatusCode)context.Response.StatusCode) switch
                {
                    HttpStatusCode.ServiceUnavailable => "The application is currently on maintenance. Please try again later.", …
Run Code Online (Sandbox Code Playgroud)

c# httpresponse asp.net-core-middleware asp.net-core-3.1

5
推荐指数
1
解决办法
3197
查看次数

ActionFilter Response.StatusCode始终为200

我正在尝试设置一个动作过滤器,只有StatusCodeHttpContext.Response302 的情况下才会执行某些操作.

我希望能够在OnActionExecuting方法中做到这一点,但StatusCode总是如此200.

ActionFilter 码:

public class CustomFilter : IActionFilter
{
   public void OnActionExecuting(ActionExecutingContext context)
    {
        // do some setup
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        if (context.HttpContext.Response.StatusCode == StatusCodes.Status302Found)
        {
            // never get here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的Action方法:

public IActionResult Redirect()
{
    return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)

和注册ActionFilterstartup:

public void ConfigureServices(
    IServiceCollection services)
{
    services.AddMvc(
        options =>
        {
            options.Filters.Add(new CustomFilter());
        });
}
Run Code Online (Sandbox Code Playgroud)

我已经检查了浏览器,它正确返回302并进行重定向.我也试过使用IAsyncActionFilter …

c# asp.net-core-mvc

2
推荐指数
2
解决办法
1329
查看次数