我正在使用MVC Web API。过去一天,我面临着一个奇怪的问题。我在构造函数中声明了多个方法,然后尝试调用它。但是每次返回“未找到方法异常”行。但是我已经在控制器中声明了方法,并且还在配置中添加了方法。我的控制器代码是:
public class GlobalController : BaseApiController
{
public GlobalController()
{
}
[HttpGet]
[ActionName("Test")]
[AllowAnonymous]
public IHttpActionResult Test(string id = "")
{
return Ok(id);
}
[HttpPost]
[ActionName("Login")]
[ResponseType(typeof(CacheUser))]
[AllowAnonymous]
[Route("api/Global/Login")]
public IHttpActionResult Login(LoginModel model)
{
try
{
CacheUser loginUser = CacheLib.Login(model);
return Ok(loginUser);
}
catch (Exception ex)
{
throw StaticLib.InternalServerError(ex);
}
}
}
我可以调用第一个方法(即测试)。但是,每当我尝试调用Login时,它都会返回未找到的方法。
WebApiConfig包含:
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "Global_DefaultApi",
routeTemplate: "api/Global/{action}",
defaults: new { controller = "Global", action = "Test" }
);
有什么主意吗?
堆栈跟踪为:
{“ Message”:“发生错误。”,“ ExceptionMessage”:“方法不正确 找到:'System.Web.Http.HttpResponseException HSSystem.Libraries.API.StaticLib.InternalServerError(System.Exception)'。“,” ExceptionType“:” System.MissingMethodException“,” StackTrace“:”
答案 0 :(得分:1)
根据例外情况,缺少方法的签名是:
System.Web.Http.HttpResponseException HSSystem.Libraries.API.StaticLib.InternalServerError(System.Exception)
这意味着您的控制器可以根据您的HSSystem.Libraries.API.StaticLib
进行编译,但是在运行时会加载另一个程序集。因此,您的GlobalController.Login()
方法被路由到并被调用,但是当JIT对其代码进行JIT处理(并在其中查找其他类的方法)时,会抛出异常,因为方法StaticLib.InternalServerError()
的特定版本找不到。也许您更改了该方法的返回类型,或添加了可选参数。这会破坏ABI。
加载错误的程序集可能有很多原因。也许您引用了另一个项目,该项目引用了该程序集的旧版本或较新版本,但没有确切的方法,并且那个版本在构建时被复制。或者您有某种插件系统。或,或,或。
确保您针对在运行时部署的相同版本进行编译。