路由配置代码如下:
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”上找不到与该请求匹配的操作。"}
备注说明:
不过bast64字符串太长,而报下图所示的错误:
请问我的路由配置有什么问题吗?
你这样使用,直接用MVC就行了,没必要用WebAPI。
发现了,用API反而更麻烦.我要改用MVC算了.
你的两个路由配置得差不多,怎么区分一个请求是WebApi还是mvc呢?根据约定,还是在WebApi的路由上加上前缀api/吧。
对的,应该加Api/