簡體   English   中英

為什么緩存了操作結果?

[英]Why is action result cached?

我有一個動作,生成密碼重置鏈接並通過電子郵件發送給用戶

public ActionResult SendResetPasswordEmail(string userName)
{
    var webUser = LoadUser(userName);
    if (webUser != null)
    {
        var token = WebSecurity.GeneratePasswordResetToken(webUser.UserName);
        emailSender.SendPasswordResetEmail(webUser, token, resetAction);
        return new HttpStatusCodeResult(HttpStatusCode.OK);
    }
    return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "No user found with username: " + userName);
}

我第一次從瀏覽器調用該操作時,得到HTTP 200響應(並在操作中點擊我的斷點)。

我第二次從瀏覽器調用該操作時,收到HTTP 304響應,指示內容未更改。

源文件中沒有[OutputCache]屬性(不在類或操作上)。

是什么導致Web服務器決定內容未更改並返回HTTP 304?

我知道一個解決方法

https://stackoverflow.com/a/18620970/141172

我有興趣了解HTTP 304響應的根本原因。

更新

首次請求標題:

請求標題

Request GET /Companies/SendResetPasswordEmail/?userName=ej HTTP/1.1
X-Requested-With    XMLHttpRequest
Accept  */*
Referer http://local:6797/Companies
Accept-Language en-US
Accept-Encoding gzip, deflate
User-Agent  Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Host    localhost:6797
DNT 1
Connection  Keep-Alive
Cookie  __RequestVerificationToken=sNOBS6qz32LtnJpLWgHHELhaE44DfIVE1LSMUgjzHjcwsvxlUFa4lOSyA5QeB8keLXYL08Psjg29CRI7W73uHLJy6A81; .ASPXAUTH=DAF8AF47E955F723EE9438866BE1B4BFBF91BA01912EF087824F03581DBCA05A4AECA01373FAF40DF0C4D5C17F17DEFA2F85C1B702988B7E0F750BFE19566FC711C7D6BD81D8F0B0ABD68AF5B3D9BA032286361F; ASP.NET_SessionId=5e2gcvkc2p3rji25z5emyqzd; HelixPlugins1.0=IEPlugin1.0

響應標題

Response    HTTP/1.1 200 OK
Server  ASP.NET Development Server/11.0.0.0
Date    Thu, 03 Apr 2014 23:29:02 GMT
Cache-Control   private, s-maxage=0
Content-Length  0
Connection  Close

注意:我在上面將localhost更改為local,因為StackOverflow不允許發布包含localhost的鏈接:-)

瀏覽器是Internet Explorer 10。

IE默認緩存ajax響應,你需要通過將ajax對象的cache屬性設置為false來明確告訴它不要進行任何ajax緩存。

Chrome等瀏覽器會自動在您的請求中添加隨機令牌,以使其唯一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM