MVC路由未使用默认操作

时间:2018-01-24 19:08:33

标签: c# ajax asp.net-mvc asp.net-mvc-4 routes

在我的web api中,我创建了这个控制器:

public class DistributionGroupController : ApiController
{
    [HttpGet]
    public ServiceResult Index(string id)
    {
        if (id == null)
            return null;
        else
            return new ServiceResult();
    }
}

另外,这是我的路线配置。我正在为我的通讯组路由指定我的默认操作为"索引":

    routes.MapHttpRoute(
        "Api action",
        "Api/{controller}/{action}"
    );
    routes.MapHttpRoute(
        "Api get",
        "Api/{controller}"
    );
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    /*This is the route in question*/
    routes.MapHttpRoute(
        "DistGroupRoute",
        "api/distributiongroup/{id}/{action}",
        new { controller = "DistributionGroup", action = "Index" }
    );

在我看来,我正在使用这个脚本(尝试)击中我的控制器:

$.ajax({
    url: "api/distributiongroup/4567bn57n5754",
    cache: false,
    success: function (response) {
        alert('success');
    }
});

但是我的ajax调用收到404 Not Found错误。但是,如果我从我的ajax调用中将index附加到我的网址,我的控制器就会被点击。所以,实质上,这是工作:

        api/distributiongroup/4567bn57n5754

确实有效:

        api/distributiongroup/4567bn57n5754/index

我的理解是,如果我没有在我的网址中指定我的操作,我的默认操作就会受到影响。我可能会在这里失踪什么?而且,更重要的是,当我使用这样的网址时,如何让我的Index控制器受到攻击:

        api/distributiongroup/4567bn57n5754

(未指定Index操作?

2 个答案:

答案 0 :(得分:0)

routes.MapHttpRoute(
    "DistGroupRoute",
    "api/distributiongroup/{id}",
    new { controller = "DistributionGroup", action = "Index" }
);

而不是:

routes.MapHttpRoute(
    "DistGroupRoute",
    "api/distributiongroup/{id}/{action}",
    new { controller = "DistributionGroup", action = "Index" }
);

无需在路线模板中添加 {action} ,因为您已将其添加到默认对象中。

基本上,你说: 每当有与此路由模板匹配的网址(api/distributiongroup/{id}/{action})时,触发Index控制器中的DistributionGroup操作并传递id参数。

答案 1 :(得分:0)

这是因为我在路由配置中指定路由的顺序。我按此顺序指定它们:

{controller}/{action}/{id}

似乎这条路线(我的默认路线):

distributiongroups
当我没有在我的网址中指定index时,

覆盖了我的distributiongroup路线。我还不完全确定为什么会这样。但重新订购我的路线配置修复它。我只需要将 routes.MapHttpRoute( "DistGroupRoute", "api/distributiongroup/{id}/{action}", new { controller = "DistributionGroup", action = "Index" } ); routes.MapHttpRoute( "Api action", "Api/{controller}/{action}" ); routes.MapHttpRoute( "Api get", "Api/{controller}" ); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); 路由放在默认路由之前:

G_x = np.array([[1,0,-1], [2,0,-2], [1,0,-1]]) //Gx
G_y = np.array([[1,2,1], [0,0,0], [-1,-2,-1]]) //Gy

Gx = sg.convolve2d(f, G_x, "same", "symm") //f is a loaded image
Gy = sg.convolve2d(f, G_y, "same", "symm")
magnitude = np.sqrt(Gx**2 + Gy**2)