В настоящее время я разрабатываю сервер авторизации OAuth2 с использованием CTP-версии DotNetOpenAuth.Мой сервер авторизации находится в asp.net MVC3 и основан на примере, предоставленном библиотекой.Все работает нормально, пока приложение не достигнет точки, где пользователь авторизует потребительский клиент.
Внутри моего контроллера OAuth есть действие, которое заботится о процессе авторизации и очень похоже на эквивалентное действие в примере:
[Authorize, HttpPost, ValidateAntiForgeryToken]
public ActionResult AuthorizeResponse(bool isApproved)
{
var pendingRequest = this.authorizationServer.ReadAuthorizationRequest();
if (pendingRequest == null)
{
throw new HttpException((int)HttpStatusCode.BadRequest, "Missing authorization request.");
}
IDirectedProtocolMessage response;
if (isApproved)
{
var client = MvcApplication.DataContext.Clients.First(c => c.ClientIdentifier == pendingRequest.ClientIdentifier);
client.ClientAuthorizations.Add(
new ClientAuthorization
{
Scope = OAuthUtilities.JoinScopes(pendingRequest.Scope),
User = MvcApplication.LoggedInUser,
CreatedOn = DateTime.UtcNow,
});
MvcApplication.DataContext.SaveChanges();
response = this.authorizationServer.PrepareApproveAuthorizationRequest(pendingRequest, User.Identity.Name);
}
else
{
response = this.authorizationServer.PrepareRejectAuthorizationRequest(pendingRequest);
}
return this.authorizationServer.Channel.PrepareResponse(response).AsActionResult();
}
Каждый раз, когда программа достигает этой строки:
this.authorizationServer.Channel.PrepareResponse(response).AsActionResult();
Система выдает исключение, которое я исследовал безуспешно.Исключением является следующее: в LINQ to Entities поддерживаются только конструкторы и инициализаторы без параметров.
Трассировка стека: http://pastebin.com/TibCax2t
Единственное, что я сделал по-другому, чемПримером является то, что я использовал первый подход кода структуры сущностей, и я думаю, что образец был сделан с использованием конструктора, который автоматически генерирует сущности.
Заранее спасибо.