作成したWEB APIが機能しており、APIに基本認証を追加しました(ユーザー名は「testing」、パスワードは「123456」)。ただし、WebフォームからそのAPIを呼び出そうとすると、「(401)Unauthorized」メッセージが表示され続けます。 APIを正常に呼び出すには、Webコードで何を変更する必要がありますか?
string url = String.Format("http://example.com"); //here I have the correct url for my API
HttpWebRequest requestObj = (HttpWebRequest)WebRequest.Create(url);
requestObj.Method = "Get";
requestObj.PreAuthenticate = true;
requestObj.Credentials = new NetworkCredential("testing", "123456");
HttpWebResponse responseObj = null;
responseObj = (HttpWebResponse)requestObj.GetResponse();
string strresult = null;
using (Stream stream = responseObj.GetResponseStream())
{
StreamReader sr = new StreamReader(stream);
strresult = sr.ReadToEnd();
sr.Close();
}
これは、認証に関して私のAPIが検索するものです。
actionContext.Request.Headers.Authorization.Parameter
NetworkCredentialの代わりにヘッダーを追加する必要がありますか、それとも同じですか?
(基本認証)Authenticated APIを呼び出すための他のソリューション
class Program
{
static void Main(string[] args)
{
BaseClient clientbase = new BaseClient("https://website.com/api/v2/", "username", "password");
BaseResponse response = new BaseResponse();
BaseResponse response = clientbase.GetCallV2Async("Candidate").Result;
}
public async Task<BaseResponse> GetCallAsync(string endpoint)
{
try
{
HttpResponseMessage response = await client.GetAsync(endpoint + "/").ConfigureAwait(false);
if (response.IsSuccessStatusCode)
{
baseresponse.ResponseMessage = await response.Content.ReadAsStringAsync();
baseresponse.StatusCode = (int)response.StatusCode;
}
else
{
baseresponse.ResponseMessage = await response.Content.ReadAsStringAsync();
baseresponse.StatusCode = (int)response.StatusCode;
}
return baseresponse;
}
catch (Exception ex)
{
baseresponse.StatusCode = 0;
baseresponse.ResponseMessage = (ex.Message ?? ex.InnerException.ToString());
}
return baseresponse;
}
}
public class BaseResponse
{
public int StatusCode { get; set; }
public string ResponseMessage { get; set; }
}
public class BaseClient
{
readonly HttpClient client;
readonly BaseResponse baseresponse;
public BaseClient(string baseAddress, string username, string password)
{
HttpClientHandler handler = new HttpClientHandler()
{
Proxy = new WebProxy("http://127.0.0.1:8888"),
UseProxy = false,
};
client = new HttpClient(handler);
client.BaseAddress = new Uri(baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var byteArray = Encoding.ASCII.GetBytes(username + ":" + password);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
baseresponse = new BaseResponse();
}
}
私はあなたのAPIがそれに追加されたヘッダーを必要とするかもしれないと思う(まだそうしていないなら)。この記事をご覧ください: https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side
ただし、基本的に、APIにはAuthorization
ヘッダーを追加する必要があります。 Authorization
キーには、Word Basic
とそれに続くスペース、およびBase64
を使用して暗号化されたユーザー名とパスワードが含まれます。したがって、インスタンスでは、testing:123456
はbase64を使用してdGVzdGluZzoxMjM0NTY=
として暗号化されます。したがって、ヘッダーレコードは次のようになります。
Authorization: Basic dGVzdGluZzoxMjM0NTY=