2011-07-05 58 views
1

我是使用C#进行web编程的新手,并为移动应用程序开发WCF RESTful服务。HTTP响应未经授权的重定向到login.aspx

在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的表单身份验证,我知道这不是REST风格的方式,但由于与其他服务集成,我无法提供帮助。 (公司内部事务,hh)

如果有一些没有错误但更好的方式来实现登录服务,请让我知道。

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

+1

在你的配置文件中有一个'authentication'部分,包含表单身份验证的登录页面? –

+0

nope。只有表单身份验证提供程序。我认为有重定向login.aspx的默认配置,我该如何改变它? – moon6pence

回答

1

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

Forms authentication: disable redirect to the login page

有很多方式来探讨这种情况,肮脏和快速排序hh

  1. 使用其他响应代码,并改变它在EndRequest
  2. 实施HttpModule和变化再次重定向302码未经验证的401。
  3. 不使用FormsAuthenticationModule,并重新实现自己的Application_AuthenticateRequest

我选择2.我觉得1.是否过脏,三是速度太慢,大的工作。

0

可以更改默认登录网址在如下鉴定部分:

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

希望它能帮助:)

+0

我试过这个选项,但是我只能设置重定向的位置,它不能被禁用。 – moon6pence

相关问题