Метод не найден, даже если он существует в контроллере - PullRequest
0 голосов
/ 20 сентября 2018

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 голосов
/ 20 сентября 2018

Подпись отсутствующего метода, в соответствии с исключением:

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

Это означает, что ваш контроллер прекрасно компилируется с вашим HSSystem.Libraries.API.StaticLib, но во время выполнения загружается другая сборка.Таким образом, ваш GlobalController.Login() метод направляется и вызывается, но при JITting его коде (и при нахождении методов других классов, которые там вызываются) выдается исключение, потому что эта конкретная версия метода StaticLib.InternalServerError() не может бытьнайденный.Возможно, вы изменили тип возвращаемого значения этого метода или добавили необязательный параметр.Это нарушает ABI.

Загрузка неправильной сборки может иметь много причин.Возможно, вы ссылаетесь на другой проект, в котором есть ссылка на более старую или более новую версию этой сборки, в которой нет точного метода, и эта версия копируется при сборке.Или у вас есть какая-то система плагинов.Или, или, или.

Убедитесь, что вы используете ту же версию, которая развернута во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...