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?我可以抛出一个异常-但这显示了异常情况,而不是他的错误。 有任何想法吗?     
已邀请:
您无需同时设置
Context.Response.Status
Context.Response.StatusCode
。只需设置
Context.Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden
会自动为您设置
Response.Status
。     
如果您使用的是MVC,请执行以下操作:
            return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
    
要完全回答这个问题,这是我使用的代码(感谢跨步者提供更多信息):
[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是访问您网站上的禁止内容的结果。我认为您要在此处返回的消息是“用户未登录\”作为结果的一部分     

要回复问题请先登录注册