写OwinResponse内容并同时设置StatusCode

时间:2015-11-17 18:21:05

标签: web-services owin

将状态代码设置为200以外的其他内容时是否可以使用OwinResponse.Write?

我在OwinMiddleware中有以下代码,但只要调用OwinResponse.Write,StatusCode总是设置为200 :(

                response.OnSendingHeaders(state =>
                {
                    var resp = (OwinResponse) state;
                    var message = string.Format(
                        "Max API concurrent calls quota exceeded, please try again later. Maximum admitted: {0}",
                        _maxConcurrentRequests);
                    resp.ReasonPhrase = message;
                    resp.Write(message);
                    resp.StatusCode = 429; // doesn't work here unless I comment out the line above
                }, response);

1 个答案:

答案 0 :(得分:1)

  1. 必须在写入正文之前设置StatusCode,而不是之后。
  2. 不要写OnSendingHeaders内的正文,它是递归的 OnSendingHeaders通常由对身体的写入触发。
  3. 你为什么在这里使用OnSendingHeaders?为什么不做全部 这直接反应?
  4. 这比通常包含在原因短语中的信息要多得多。该详细程度属于响应主体。 429的默认原因短语为Too Many Requests