0
我的另一個問題,耶!Web Api User.Identity.Name
好了,我有這樣的代碼:
public class TokenMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var token = request.Headers.GetValues("Authorization-Token").FirstOrDefault();
if (String.IsNullOrEmpty(token))
return Task<HttpResponseMessage>.Factory.StartNew(() =>
{
return new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new StringContent("Missing Authorization-Token")
};
});
try
{
var user = UserRepository.GetUsers().FirstOrDefault(x => x.UserName == RSAClass.Decrypt(token));
if (user == null)
return Task<HttpResponseMessage>.Factory.StartNew(() =>
{
return new HttpResponseMessage(HttpStatusCode.Forbidden)
{
Content = new StringContent("Unauthorized User")
};
});
var identity = new GenericIdentity(user.UserName);
var principal = new GenericPrincipal(identity, null);
Thread.CurrentPrincipal = principal;
if (HttpContext.Current != null)
HttpContext.Current.User = principal;
}
catch (RSAClass.RSAException)
{
return Task<HttpResponseMessage>.Factory.StartNew(() =>
{
return new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent("Error encountered while attempting to process authorization token")
};
});
}
return base.SendAsync(request, cancellationToken);
}
}
和它完美的作品。 如果我把我的使用jQuery的,像這樣的API:
function GetAllCategories() {
var credentials = '@ViewBag.encrypted';
$.ajax({
url: "http://localhost:18904/api/Categories",
type: "GET",
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization-Token", credentials);
},
success: function (data) {
$.each(data, function (i, category) {
var row = '<tr><td>' + category.DisplayName + '</td><td>' + category.DateCreated + '</td><td>' + category.AssetCount + '</td><td>' + category.CategoryCount + '</td></tr>';
$('#categories').append(row);
});
},
error: function() {
alert('error');
}
});
}
我得到類別的一個很好的列表。高手。 現在您可以看到我正在設置CurrentPrincipal和Current.User。 在我的CategoriesController我有訪問我的User.Identity這是偉大的。
我的問題是這樣的: 我有我自己的配置文件,它有很多其他信息存儲在它中,所以通用的MembershipUser是不夠的。所以我怎樣才能設置我的個人資料,以便它會持續。例如,我想設置一些將保留在MessageHandler中的設置,例如設置HttpContext.Current.User或Thread.CurrentPrincipal。
任何人都可以幫我一把嗎?
乾杯,
/r3plica