调用一个Task并返回True或False MVC 6

时间:2016-01-13 01:00:53

标签: task asp.net-identity roles asp.net-core-mvc

我可以调用此任务。我似乎无法理解返回的内容。更少使用它。我只想要一个对错,所以我可以保存一个角色。

   public ActionResult Create([FromServices]IServiceProvider serviceProvider,string roleName)
    {

        ModelState.Clear();

        try
        {

        var doesit= DoesRoleExist(serviceProvider, roleName);

            if (string.IsNullOrEmpty(roleName))
            {
                throw new Exception("Invalid Role Name: Cannot be empty and must be unique");
            }



             context.Roles.Add(new Microsoft.AspNet.Identity.EntityFramework.IdentityRole()
            {
                Name = roleName,
                NormalizedName = roleName.ToUpper()
            });

            context.SaveChanges();

            return RedirectToAction("Index");
        }
        catch
        {
            ModelState.AddModelError(string.Empty, string.Format("{0}", "Unable to Create Role. "));
            return View();
        }
    } 

当我打破时,我得到了这个" var doesit = DoesRoleExist(serviceProvider,roleName)"

? doesit

Id = 2093,Status = WaitingForActivation,Method =" {null}",Result =" {Not yet computed}"     AsyncState:null     CancellationPending:false     CreationOptions:无     例外:null     Id:2093     结果:错误     状态:WaitingForActivation

以下是任务:

 private async Task<bool> DoesRoleExist(IServiceProvider serviceProvider, string roleName)
        {

            bool result =false;

            var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();

           result = await RoleManager.RoleExistsAsync(roleName);
           return result;
    }

这很有趣但除了&#34;不能比较布尔值===&#34;当我在ActionResult中放入一个If语句时,我遇到了这个问题,我也看到在上面的任务中,&#34;返回结果;&#34;运行AFTER&#34; result =等待RoleManager.RoleExistsAsync(roleName);&#34;。去搞清楚。我只要求一个简单的真或假,并且能够比较一个布尔值,看看我是否想要添加角色。

我想补充说我的context.Roles没有&#34; RoleExists&#34;方法。 但是,出于某种原因,在异步任务中我可以调用&#34; .RoleExistsAsync&#34;由于某些原因。

1 个答案:

答案 0 :(得分:0)

像往常一样,这个MVC的东西我只是尝试每一个我能想到的随机副本和粘贴。在查看This CodeProject item时,我注意到您可以使ActionResult异步。想到这将允许我避免调用任务。我去做了这个:

    [HttpPost]
   public async Task<ActionResult> Create([FromServices]IServiceProvider serviceProvider,string roleName)
    {

var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();

try
{

  bool  result = await RoleManager.RoleExistsAsync(roleName);

    //LEFT OUT STRING.EMPTY CHECK FOR BREVITY
   //NOTICE HOW I GOT A BOOLEAN COMPARISON BELOW (OLD AS THE HILLS!)  
        if (result)
        {
            throw new Exception("This Role Name already exists");

        }

//ADD ROLE HERE IF NOT EXISTS AND NOT EMPTY

所以我希望我狂野的谣言会帮助别人。基本上我没有必要处理RolesStore制作RoleManager的方法,而且我能够找出异步并等待足够的东西在MVC 6动作结果中使用。

我仍然对这样做“简单”(LOL)的任何评论和方法持开放态度。我很乐意将一个“接受的答案”交给一个饥肠辘辘的人。