Asp.net mvc 如何使用AttributeRouting向/Checkemail异步方法添加路由?

Asp.net mvc 如何使用AttributeRouting向/Checkemail异步方法添加路由?,asp.net-mvc,attributerouting,Asp.net Mvc,Attributerouting,附加: 我的项目转换为AttributeRouting的尝试失败。 当主页上的消息在“无新电子邮件”和“您有邮件!”之间更改时,项目将正常运行。在当前出错状态下,该消息不会更改。 javascript控制台中将显示错误。 使用浏览器直接导航到/检查电子邮件会导致404错误 原创帖子: 这是一个关于(使用最新的v3.4.1)的问题 我正在尝试将一个GET[“”]挂接到以下代码上 [GET(“”)我得到一个404-未找到资源。 [GET(“CheckEmail”)]我不允许使用405-方法 我正在尝

附加:

我的项目转换为AttributeRouting的尝试失败。
当主页上的消息在“无新电子邮件”和“您有邮件!”之间更改时,项目将正常运行。在当前出错状态下,该消息不会更改。
javascript控制台中将显示错误。
使用浏览器直接导航到/检查电子邮件会导致404错误

原创帖子:

这是一个关于(使用最新的v3.4.1)的问题

我正在尝试将一个
GET[“”]
挂接到以下代码上

[GET(“”)
我得到一个404-未找到资源。
[GET(“CheckEmail”)]
我不允许使用405-方法

我正在尝试将此项目转换为AttributeRouting:。checkemail操作是我失败的地方

该方法是作为“”技术的一部分的异步方法

我对我的沮丧尝试发表了以下评论:

public class CheckEmailController : AsyncController
    {
        //
        // GET: /CheckEmail/

        //tried [GET("")]
        //tried [GET("CheckEmail")]
        public void IndexAsync()
        {
            AsyncManager.OutstandingOperations.Increment();
            MyAsyncEmailChecker.CheckForEmailAsync(hasEmail =>
            {
                AsyncManager.Parameters["hasEmail"] = hasEmail;
                AsyncManager.OutstandingOperations.Decrement();
            });
        }

        private class IndexResponse
        {
            public bool d { get; set; }
        }

        public JsonResult IndexCompleted(bool hasEmail)
        {
            return this.Json(new IndexResponse() { d = hasEmail });
        }

    }
Global.asax.cs-与我的所有AR项目一样

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
}

谢谢

如果您使用的是ASP.NET MVC 4和.NET 4.5,那么您应该只使用async关键字和任务。这将解决路由问题,并降低控制器的复杂性。这是微软白皮书的链接

但总而言之,您的代码将更改为此

public class CheckEmailController : AsyncController
{
    //
    // GET: /CheckEmail/
    [GET("CheckEmail")]
    public async Task<ActionResult> Index()
    {
      return View( new IndexReponse {
        d = await MyAsyncEmailChecker.CheckForEmailAsync() 
      });
    }

    public class IndexResponse
    {
        public bool d { get; set; }
    }


}
公共类CheckEmailController:AsyncController
{
//
//获取:/CheckEmail/
[获取(“检查电子邮件”)]
公共异步任务索引()
{
返回视图(新索引响应){
d=等待MyAsyncEmailChecker.CheckForEmailAsync()
});
}
公共类索引响应
{
公共bool d{get;set;}
}
}

能否升级到ASP.NET MVC 4和.NET 4.5。此时,您不再需要使用旧模式。此外,您的电子邮件检查器具体做什么?是本地的还是远程的?