首页 新闻 会员 周边

请问这个WebAPI的路由配置有什么问题?

0
悬赏园豆:20 [已解决问题] 解决于 2015-05-13 13:42

路由配置代码如下:

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

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Image", action = "AddImage", id = UrlParameter.Optional }
            );
            
        }
    }

 

WebApiConfig 配置如下:

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Formatters.Remove(config.Formatters.XmlFormatter);
            config.Formatters.Add(config.Formatters.JsonFormatter);
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "{controller}/{action}/{id}",
                defaults: new { controller = "", action = "", id = UrlParameter.Optional }
            );

            // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
            // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
            // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712//config.EnableQuerySupport();

            // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
            // 有关详细信息,请参阅: http://www.asp.net/web-api
            config.EnableSystemDiagnosticsTracing();
        }
    }

 

WebAPI控制器及Action定义如下:

 

前端jqueryAjax请求如下:

 var base64 = reader.result.split('base64,')[1];

                alert("beginAjax");
                $.ajax({
                    type: "POST",
                    url: "http://imginapi.com/image/AddImage",
                    async: false,
                    data: "{'base64StrImgData':'" + base64 + "','sessionID':'awfewoe','imgFormat':'jpg'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        alert("success");
                        alert(data.d);
                    },

                    error: function (err) {
                        alert("error");
                        alert(err.responseText);
                    } 

                });
                alert("endAjax");

 

最后error事件里弹出的消息如下:

 

{"Message":"未找到与请求 URI“http://imginapi.com/image/AddImage”匹配的 HTTP 资源。","MessageDetail":"在控制器“Image”上找不到与该请求匹配的操作。"}

 

备注说明:

如果将方法的[HttpPost]改成HttpGet,

并将ajax请求的type改为get,是能请求到该Action的,

不过bast64字符串太长,而报下图所示的错误:

 

为什么换成HttpPost,ajax里的type也换成POST之后,就请求不到了?

请问我的路由配置有什么问题吗?

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2015-05-13 09:01
< >
分享
最佳答案
0

你这样使用,直接用MVC就行了,没必要用WebAPI。

收获园豆:10
dudu | 高人七级 |园豆:31003 | 2015-05-13 09:35

发现了,用API反而更麻烦.我要改用MVC算了.

hexllo | 园豆:318 (菜鸟二级) | 2015-05-13 13:42
其他回答(2)
0

你的两个路由配置得差不多,怎么区分一个请求是WebApi还是mvc呢?根据约定,还是在WebApi的路由上加上前缀api/吧。

收获园豆:8
幻天芒 | 园豆:37175 (高人七级) | 2015-05-13 09:08

对的,应该加Api/

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2015-05-13 13:41
0

用routedebug调试一下,建议按照@幻天芒  说的,加上api前缀

收获园豆:2
灯塔下的守望者 | 园豆:319 (菜鸟二级) | 2015-05-13 10:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册