Alles funktioniert hervorragend für mein Projekt, wenn ich die Schritte im Artikel wiederhole, einschließlich des Testen der API über Restlet. Ich versuche jedoch, für dieses Projekt die testgetriebene Entwicklung (TDD) zu verwenden, und ich möchte idealerweise testen, dass alles in meinen Tests funktioniert, einschließlich des Token -Validierungs -Handlers. Ich kann meine Controller testen, wenn ich sie direkt in meinen Unit -Tests rufe, aber das umgeht den tatsächlichen Token -Validierungs -Handler. Also habe ich versucht, selbst gehostete HTTP zu verwenden, um die vollständige API, einschließlich der gesamten Token-Validierungs-Handler-Logik, ordnungsgemäß auszuüben. Hier ist mein kompletter Unit -Test, um ein Token zu erhalten und dann das Token an eine zweite Methode zu übergeben, für die Autorisierung erforderlich ist: < /p>
Code: Select all
[TestMethod]
public void GetAuthorizedStatus_SelfHostedHTTP()
{
HttpServer server = TestAPIHelper.GenerateTestServer();
using (HttpMessageInvoker client = new HttpMessageInvoker(server))
{
string token = string.Empty;
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, loginURL))
{
var stringContent = new StringContent(JsonConvert.SerializeObject(TestAPIHelper.loginObject), Encoding.UTF8, "application/json");
request.Content = stringContent;
using (HttpResponseMessage response = client.SendAsync(request, System.Threading.CancellationToken.None).Result)
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "Error getting token from login portion");
token = response.Content.ReadAsAsync().Result;
Assert.IsTrue(token.Length > 50);
}
}
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, authorizedStatusURL))
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using (HttpResponseMessage response = client.SendAsync(request, System.Threading.CancellationToken.None).Result)
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "Error getting status from Authenticated portion.");
}
}
};
}
Code: Select all
Thread.CurrentPrincipal = handler.ValidateToken(token, validationParameters, out securityToken);
HttpContext.Current.User = handler.ValidateToken(token, validationParameters, out securityToken);