HTTP响应未授权重定向到login.aspx

时间:2011-07-05 08:50:12

标签: .net asp.net wcf rest

我是使用C#进行Web编程的新手,并为移动应用程序开发WCF RESTful服务。

在REST服务类中,我将响应代码设置为HTTP 401 Unauthorized,但它会突然重定向其他页面。

这是我的服务代码:

    [WebGet]
    public string login(string id, string password)
    {
        if (Membership.ValidateUser(id, password))
        {
            FormsAuthentication.SetAuthCookie(id, false);

            WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK;
            return "Login Succeeded";
        }
        else
        {
            WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
            return "Login Failed";
        }
    }

如果登录成功,它可以正常工作,但如果我输入错误的密码,此页面会重定向到

http://localhost:50195/login.aspx?ReturnUrl=%2fuser%2flogin%3fid%3dtest74323%26password%3d535201&id=test74323&password=####

我认为自动重定向到用户登录页面配置,我该如何关闭该配置?当我在服务中使用表单身份验证时,我认为问题很复杂。

我正在使用带有登录cookie的表单身份验证,我知道这不是RESTful方式,但由于与其他服务的集成,我无法帮助它。 (公司内部事务,......)

如果有一些不错但更好的方法来实施登录服务,请告诉我。

当我使用网络浏览器访问服务时,如何显示更好的错误消息?如果登录成功,我知道没有什么可以返回的,我想如果客户端使用Web浏览器访问,我会更好地显示字符串值。

2 个答案:

答案 0 :(得分:1)

我在下面的链接中找到了答案:

Forms authentication: disable redirect to the login page

有很多方法可以探测这种情况,肮脏而快速排序......

  1. 使用其他响应代码并在EndRequest
  2. 进行更改
  3. 实现HttpModule并再次将重定向302代码更改为未经身份验证的401。
  4. 请勿使用FormsAuthenticationModule,并重新实施您自己的Application_AuthenticateRequest
  5. 我选择2.我认为1.太脏了,3.太慢了,工作太大了。

答案 1 :(得分:0)

您可以在身份验证部分更改默认登录网址,如下所示:

<authentication mode="Forms">
    <forms loginUrl="Login.aspx" />
</authentication>

希望有所帮助:)