簡體   English   中英

如何使 SOAP API 請求需要某些字段?

[英]How to make some fields to be required for SOAP API Requests?

為了制作 SOAP API,我制作了一個 WCF 服務。
我想讓這些字段成為必需: UsernamePasswordID
當客戶端向 API 發出請求時,如何使它們成為必填字段?

我想要 :

  • 使每個 API Request 都需要它們,並且當請求不包含其中之一時發送 ERROR。
  • 檢查它們以查看客戶端是否發送了正確的 Credentials ,如果其中一個錯誤發送錯誤。
    例如 :
    如果它們的值必須是:
  • Username = 用戶
  • Password = 通過
  • ID = 身份證號碼

到目前為止,這是他們的代碼:

[OperationContract]
Credentials CheckCredentials(Credentials credentials);
[DataContract]
public class Credentials
{
    [DataMember]
    public string Username { get; set; }

    [DataMember]
    public string Password { get; set; }

    [DataMember]
    public string ID { get; set; }

    [DataMember]
    public string ErrorResult { get; set; }

}
public Credentials CheckCredentials(Credentials credentialsCheck)
{
    if (credentialsCheck.Username == "user" && 
        credentialsCheck.Password == "pass" && 
        credentialsCheck.ID == "IdNumber")
    {
        credentialsCheck.ErrorResult = "Correct";

        return credentialsCheck;
    }
    else
    {
        credentialsCheck.ErrorResult = "Wrong";

        return credentialsCheck;
    }

}

任何其他建議將不勝感激。

WCF中提供了UserName認證,這會要求客戶端在調用服務時提供用戶名和密碼,這里是一個演示:

創建 CustomUserNameValidator 類:

public class CustomUserNameValidator : System.IdentityModel.Selectors.UserNamePasswordValidator
        {
            public override void Validate(string userName, string password)
            {
                if (null == userName || null == password)
                {
                    throw new ArgumentNullException();
                }

                if (!(userName == "test1" && password == "test1") && !(userName == "test2" && password == "test2"))
                {
                    throw new FaultException("Unknown Username or Incorrect Password");
                }
            }
        }

在配置文件中添加userNameAuthentication節點:

 <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Microsoft.Samples.UserNamePasswordValidator.CalculatorService+CustomUserNameValidator, service"/>

客戶端調用時需要提供用戶名和密碼:

  proxy.ClientCredentials.UserName.UserName = "test1";
  proxy.ClientCredentials.UserName.Password = "test1";

如果還需要驗證ID,則需要考慮使用Custom Token。 關於如何創建自定義Token,可以參考這個鏈接:

https://docs.microsoft.com/en-us/dotnet/framework/wcf/extending/how-to-create-a-custom-token

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM