C# 未找到与请求URI';匹配的HTTP资源;Myurl';在控制器上未找到任何操作';控制器名称';这与请求相符
Webapi方法在RestConsole中运行良好,但在AndroidApplication中调用该Webapi方法时会显示错误 { “消息”:“未找到与请求URI“”匹配的HTTP资源。” “MessageDetail”:“在控制器‘apiCityInfo’上未找到与请求匹配的操作。” } 甚至我也试着将我的控制器名称从CityInfo更改为apiCityInfo,并通过 谷歌的许多例子中都提到了各种路由技巧 我还尝试将Actionname与下面控制器中提到的httppost动词放在一起 我的控制器代码是C# 未找到与请求URI';匹配的HTTP资源;Myurl';在控制器上未找到任何操作';控制器名称';这与请求相符,c#,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Webapi方法在RestConsole中运行良好,但在AndroidApplication中调用该Webapi方法时会显示错误 { “消息”:“未找到与请求URI“”匹配的HTTP资源。” “MessageDetail”:“在控制器‘apiCityInfo’上未找到与请求匹配的操作。” } 甚至我也试着将我的控制器名称从CityInfo更改为apiCityInfo,并通过 谷歌的许多例子中都提到了各种路由技巧 我还尝试将Actionname与下面控制器中提到的httppost动词放在一起 我的
public class apiCityInfoController : ApiController
{
private DBContext db = new DBContext();
[HttpPost, ActionName("PostSearchByCategory")]
public IHttpActionResult PostSearchByCategory(string CategoryName)
{
var errorMessage = "";
int errorCode = 0;
//string json = null;
string jsonResult = "Error";
var SubCategory = db.CityDatas.Where(x => x.CategoryName.Equals(CategoryName)).ToList().FirstOrDefault().SubCategoryName;
try
{
if (SubCategory !=null)
{
//errorMessage = " Login ID cannot be Null ";
//errorCode = 1;
var SubCategoryresult = (from p in db.CityDatas
where p.CategoryName.Equals(CategoryName)
select new
{
SubCategoryName = p.SubCategoryName,
}
).ToList();
var data = new
{
Result = new
{
//ErrorCode = errorCode,
//ErrorMessage = errorMessage,
ResultSet = SubCategoryresult,
}
};
return Json(data);
}
else
{
var Dataresult = (from p in db.CityDatas
where p.CategoryName.Equals(CategoryName)
select new
{
DataImage = p.DataImage,
DataName = p.DataName,
DataAddress = p.DataAddress,
DataPhoneNo = p.DataPhoneNo,
}
).ToList();
var data = new
{
Result = new
{
ResultSet = Dataresult,
}
};
//jsonResult = JsonConvert.SerializeObject(data);
return Json(data);
}
}
catch (Exception e)
{
errorCode = 401;
errorMessage = e.Message;
var data = new
{
Result = new
{
ErrorCode = errorCode,
ErrorMessage = "CategoryName Not Exists",
}
};
jsonResult = JsonConvert.SerializeObject(data);
}
return Ok(jsonResult);
}
模型部分是
[Table("CityInfo")]
public class CityData
{
//[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Key]
public int CityInfo_Id { get; set; }
public String CategoryName { get; set; }
public String SubCategoryName { get; set; }
public String DataImage { get; set; }
public String DataName { get; set; }
public String DataAddress { get; set; }
public String DataPhoneNo { get; set; }
}
模型中的DBContext
public class DBContext : DbContext
{
public DBContext()
: base("name=DefaultConnection")
{
}
public DbSet<WebApi.Models.CityData> CityDatas { get; set; }
}
))
WebApi Config.cs文件为
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
//name: "DefaultApi",
//routeTemplate: "api/{controller}/{id}",
//defaults: new { id = RouteParameter.Optional }
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "Post", id = RouteParameter.Optional }
);
}
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
路由配置.cs文件为
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
//name: "DefaultApi",
//routeTemplate: "api/{controller}/{id}",
//defaults: new { id = RouteParameter.Optional }
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "Post", id = RouteParameter.Optional }
);
}
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Global.asx文件不可用
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Database.SetInitializer<DBContext>(null);
}
}
公共类WebAPI应用程序:System.Web.HttpApplication
{
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Database.SetInitializer(null);
}
}
我做错了什么?如何修复错误?参数
CategoryName
是非可选的,因此您需要将其作为参数包含在请求中。URL应该如下所示:http://beatrootstudios.co.in/api/apiCityInfo/PostSearchByCategory?CategoryName=category
您可能想让这成为一个GET操作,与帖子相反。感谢Get方法运行良好,没有问题,但当我使用Httppost方法时会出现问题,因此,出于安全原因,u Plz能否帮助我解决Httppost方法bcoz中的问题使用Get方法将不会成为gud实践。。。