【问题标题】:Method not found: when send request web api controlerMethod not found: then send request web api controller
【发布时间】:2018-12-30 01:11:32
【问题描述】:

当我尝试调用 api 方法时,我遇到了异常

找不到方法:'无效 System.Web.Http.Filters.HttpActionExecutedContext.set_Response(System.Net.Http.HttpResponseMessage)'。

ApiController:-

[System.Web.Http.HttpGet]
public HttpResponseMessage CheckUserAuthentication(string UserName, string Password)
{
    DomUserAuthentication objauthentication = new DomUserAuthentication();
    var res = Request.CreateResponse(HttpStatusCode.OK);
    /////Code here
    res.Content = new StringContent(json, Encoding.UTF8, "application/json");
    return res;
}

这是我的 Webapi.config:-

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{Action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

错误详情:-

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Method not found: 'Void System.Web.Http.Filters.HttpActionExecutedContext.set_Response(System.Net.Http.HttpResponseMessage)'.
</ExceptionMessage>
<ExceptionType>System.MissingMethodException</ExceptionType>
<StackTrace>
at SalesRevUp.CrossCutting.DataAPIErrors.OnException(HttpActionExecutedContext context) at System.Web.Http.Filters.ExceptionFilterAttribute.System.Web.Http.Filters.IExceptionFilter.ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken) at System.Web.Http.ApiController.<>c__DisplayClass8.<>c__DisplayClassa.<InvokeActionWithExceptionFilters>b__6(IExceptionFilter filter) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator`1 enumerator, CancellationToken cancellationToken)
</StackTrace>
</Error>

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api csharpcodeprovider


    【解决方案1】:

    作为替代解决方案,您可以使用属性路由 https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/create-a-rest-api-with-attribute-routing

        [Route("IntermediaryData/CheckUserAuthentication")]
        [System.Web.Http.HttpGet]
        public HttpResponseMessage CheckUserAuthentication(string UserName, string Password)
        {
            DomUserAuthentication objauthentication = new DomUserAuthentication();
            var res = Request.CreateResponse(HttpStatusCode.OK);
            /////Code here
            res.Content = new StringContent(json, Encoding.UTF8, "application/json");
            return res;
        }
    

    【讨论】:

      【解决方案2】:

      Get 方法的名称不正确将名称从“CheckUserAuthentication”更改为“GetCheckUserAuthentication”

       public HttpResponseMessage GetCheckUserAuthentication(string UserName, string Password)
              {
                  DomUserAuthentication objauthentication = new DomUserAuthentication();
                  var res = Request.CreateResponse(HttpStatusCode.OK);
                  ///////Code here
                  res.Content = new StringContent(json, Encoding.UTF8, "application/json");
                  return Request.CreateResponse(HttpStatusCode.OK);
              }
      

      【讨论】:

      • 感谢您的建议。但不适合我!如果有任何不同的方法,请提出建议。
      • 能否添加整个 API 控制器代码 sn-p 且不包含核心业务逻辑
      • 我尝试了以下测试方法,但它也不起作用。这是代码详细信息:- [System.Web.Http.HttpGet] public HttpResponseMessage GetTest() { var res = Request.CreateResponse(HttpStatusCode.OK);字符串 json = JsonConvert.SerializeObject("ABC"); res.Content = new StringContent(json, Encoding.UTF8, "application/json");返回资源; }
      • 你是怎么从浏览器调用这个的?
      【解决方案3】:

      如果此问题仍然存在。我找到了解决方案。 问题出在 .Net 框架上。 我已经从 4.6 更新到 4.7,问题解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-10
        • 2015-07-21
        • 2021-12-27
        • 2019-05-12
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多