Asp.Net Web服务:我想返回错误403禁止
我有一个在c#/ asp.net中编程的Web服务。
[WebService(Namespace = "http://example.com/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] [System.ComponentModel.ToolboxItem(false)] public class Service: System.Web.Services.WebService { [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public Result GetData() { User user = GetUser(); if (user.LoggedIn) { return GetData(); } else { // raise exception -> return error 403 } }
如何从此Web服务返回错误403? 我可以抛出exception – 但这显示了exception,而不是他的错误。
有任何想法吗?
您不需要同时设置Context.Response.Status
和Context.Response.StatusCode
。 简单的设定
Context.Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden
将自动为您设置Response.Status
。
如果您使用的是MVC,则需要执行以下操作:
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
完全回答这个问题 – 这是我用过的代码(感谢strider获取更多信息):
[WebService(Namespace = "http://example.com/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] [System.ComponentModel.ToolboxItem(false)] public class Service: System.Web.Services.WebService { [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public Result GetData() { User user = GetUser(); if (user.LoggedIn) { return GetData(); } else { Context.Response.Status = "403 Forbidden"; //the next line is untested - thanks to strider for this line Context.Response.StatusCode = 403; //the next line can result in a ThreadAbortException //Context.Response.End(); Context.ApplicationInstance.CompleteRequest(); return null; } }
您可以通过将代码放在WebService构造函数中来保护所有方法。 这可以防止您的WebMethod被调用:
public Service(): base() { if (!GetUser().LoggedIn) { Context.Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden; Context.Response.End(); } }
在Asp.Net Web Api 2中,您将使用:
return new StatusCodeResult(HttpStatusCode.Forbidden, this);
Context.Response.StatusCode = 403;
您的Web服务请求将首先遇到您的global.asax文件。 你可以检查并返回那里。
禁止403将是访问您网站上的禁止内容的结果。 我想你想要的是在结果中返回一条消息“用户未登录”