即使控制器中也没有找到方法

时间:2018-09-20 11:13:59

标签: c# asp.net-web-api

Sample Request我正在使用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“:”

1 个答案:

答案 0 :(得分:1)

根据例外情况,缺少方法的签名是:

System.Web.Http.HttpResponseException HSSystem.Libraries.API.StaticLib.InternalServerError(System.Exception)

这意味着您的控制器可以根据您的HSSystem.Libraries.API.StaticLib进行编译,但是在运行时会加载另一个程序集。因此,您的GlobalController.Login()方法被路由到并被调用,但是当JIT对其代码进行JIT处理(并在其中查找其他类的方法)时,会抛出异常,因为方法StaticLib.InternalServerError()的特定版本找不到。也许您更改了该方法的返回类型,或添加了可选参数。这会破坏ABI。

加载错误的程序集可能有很多原因。也许您引用了另一个项目,该项目引用了该程序集的旧版本或较新版本,但没有确切的方法,并且那个版本在构建时被复制。或者您有某种插件系统。或,或,或。

确保您针对在运行时部署的相同版本进行编译。