2015-11-02 1 views
-1

С надеждой на добавление аутентификации на MVC 5 Boilerplate template. Следующий фрагмент кода работал хорошо в своем собственном original sample project, но когда он интегрировал его содержимое в шаблон Boilerplate, и пытались зарегистрировать новый пользователь, что-то становится противоречивым и появляется исключение браузера, указывая на следующую строку «ОЖИДАНИЕ»:Пытается добавить аутентификацию к шаблону ASP.NET MVC для котлов - вопрос async/await

// POST: /Account/Register 
[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Register(RegisterViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
 var result = await UserManager.CreateAsync(user, model.Password); 
 if (result.Succeeded) 
     { 
     string callbackUrl = await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account"); 
     ViewBag.Message = "Check your email and confirm your account, you must be confirmed " 
         + "before you can log in."; 
     ViewBag.Link = callbackUrl; 
     return View("Info"); 
     } 
     AddErrors(result); 
    } 
    return View(model); 
} 

Я читал во многих местах, что, когда возникает проблема асинхронности, люди советуют сделать это синхронно, но для моего случая многие вещи станут несовместимыми. Интересно, как сохранить этот метод асинхронным, поскольку он был оригинальным in the template,

+1

Во-первых, это предупреждение, а не ошибка. Это не мешает вашему приложению работать, это просто признак того, что вы делаете что-то странное. Во-вторых, это совершенно верно - ваш метод GetItems не имеет никакого ожидания, поэтому ключевое слово async в объявлении бесполезно, и метод будет на 100% синхронным - нет причин для его возврата 'Задача'. – Luaan

+0

Браузер дает исключение, и я не могу игнорировать это, пожалуйста, прочитайте весь вопрос, включая обсуждение шаблона. –

+0

Вы компилируете с предупреждениями как ошибки? – Lee

ответ

1

Благодаря Nikita1315 помощь, я мог бы найти, что следующий синтаксис конфигурации был отсутствует в файле startup.cs:

 ConfigureAuth(app); 

поэтому класс запуска будет выглядеть следующим образом:

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     ConfigureContainer(app); 
     ConfigureAuth(app); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    } 
} 

Итак, как только я добавил эту конфигурацию, и без изменения какого-либо метода асинхронного, я мог бы зарегистрировать первый пользователь.

3

Ваш GetItems не должен await, поэтому его не должно быть async. Просто измените подпись:

private List<SyndicationItem> GetItems(CancellationToken cancellationToken) 

и изменить код вызова от:

await GetItems(token); 

к:

GetItems(token); 
+0

И что, если я использую TaskCompletionSource , предложенный Андри, он работал для меня для FeedServices.cs, но я все еще получаю ту же проблему для метода AccountController. –

+0

Я читал много сообщений, где говорится, что они преобразуют асинхронные методы в синхронные, интересно, почему авторы шаблонов сделали их асинхронными. AccountController был сделан Риком Андерсоном: http: //www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirm-and-password-reset –

+0

@ Sami-L Вам нужен асинхронный контроллер, если у вас асинхронная работа делать. У вас нет асинхронной работы, которую вы делаете. – Servy

Смежные вопросы