Webapimethod 在 RestConsole 中运行良好,但在 AndroidApplication 中调用该 Webapi 方法时显示错误
{ "Message": "找不到与请求 URI 'http://beatrootstudios.co.in/api/apiCityInfo/PostSearchByCategory' 匹配的 HTTP 资源。",
"MessageDetail": "在 Controller 'apiCityInfo' 上找不到与请求匹配的操作。"
我什至尝试将我的 Controller 名称从 CityInfo 更改为 apiCityInfo 以及 By 谷歌许多示例中提到的各种路由技巧
我还尝试将 Actionname 与下面 Controller 中提到的 httppost 动词放在一起 ...
我的 Controller 代码是
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; }
}
表定义是
CREATE TABLE [dbo].[CityInfo] (
[CityInfo_Id] INT IDENTITY (1, 1) NOT NULL,
[CategoryName] NVARCHAR (100) NULL,
[SubCategoryName] NVARCHAR (100) NULL,
[DataImage] NVARCHAR (MAX) NULL,
[DataName] NVARCHAR (100) NULL,
[DataAddress] NVARCHAR (300) NULL,
[DataPhoneNo] NVARCHAR (100) NULL,
PRIMARY KEY CLUSTERED ([CityInfo_Id] ASC)
);
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 }
);
}
}
路由Config.cs文件是
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);
}
}
我做错了什么?我该如何修复错误?
最佳答案
参数 CategoryName
是非可选的,因此您需要将其作为参数包含在您的请求中。 URL 应如下所示:http://beatrootstudios.co.in/api/apiCityInfo/PostSearchByCategory?CategoryName=category
并且您可能希望使其成为 GET 操作,而不是 POST。
关于c# - 找不到与请求 URI 'Myurl' 匹配的 HTTP 资源 在 Controller 'controllername' 上找不到与请求匹配的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30546027/