2011-07-05 56 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

相關問題