500 内部:找到多个与请求匹配的操作

Posted

技术标签:

【中文标题】500 内部:找到多个与请求匹配的操作【英文标题】:500 Internal: Multiple actions were found that match the request 【发布时间】:2017-08-29 16:25:33 【问题描述】:

AJAX

 $.ajax(
                url: '../api/TechViews/SView',
                type: 'POST',
                dataType: 'json',
                data: JSON.stringify( Filter: JSON.stringify(eth.Data), Type: $('.productType.active').data('name'), Name: $('#txtView').val() ),
                global: false,
                contentType: "application/json; charset=utf-8",
                success: function (data) 
                   alert('success');

                ,
                error: function (xhrequest, ErrorText, thrownError) 
                   alert('Fail');
                
            );

控制器

    [Route("SView")]
    [HttpPost]
    public string Post([FromBody]TechViewsModel value)
    
        string result = string.Empty;
        return result;
    

    [Route("DView")]
    [HttpPost]
    public string Post([FromBody]TechViewsModel value)
    
        string result = string.Empty;
        return result;
    

Route 使用的命名空间是 AttributeRouting.Web.Mvc。在AJAX 通话中,我收到2 个错误500 (Internal Server Error)

    TechViewsSView

回复是"Message":"An error has occurred.","ExceptionMessage":"Multiple actions were found that match the request: \r\nSystem.String Post

路由配置

 public static void RegisterRoutes(RouteCollection routes)
    
        routes.IgnoreRoute("resource.axd/*pathInfo");

        routes.MapRoute(
            name: "Default",
            url: "controller/action/id",
            defaults: new  controller = "Login", action = "LoginPage", id = UrlParameter.Optional 
        );
    

我试过了,

    删除HttpPost 重新订购 HttpPostRoute 更改命名约束的名称 删除参数中的FromBody 更改方法名称和参数类型。

当我只使用一个没有Route 的帖子时,相同的代码可以正常工作。

我哪里错了?

【问题讨论】:

这两个动作不能存在于同一个控制器类中。 C# 不允许这样做。它们具有相同的名称、参数和返回类型。 @juunas 让我知道实现这一目标的替代方案是什么? 【参考方案1】:

在 api 路由配置中启用config.MapHttpAttributeRoutes() 选项。

public static class WebApiConfig
    
        public static void Register(HttpConfiguration config)
        
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

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

在 global.asax.cs 中

GlobalConfiguration.Configure(WebApiConfig.Register);

【讨论】:

并安装HelpPage nuget包nuget.org/packages/Microsoft.AspNet.WebApi.HelpPage,将通过'../api/help'为您提供api路由文档,有助于解决此类问题 已安装,但没有帮助。此外,GlobalConfiguration 没有 Configure 的定义。是吗? 检查用于 GlobalConfiguration 的命名空间,它应该是 System.Web.Http 来自 System.Web.Http.WebHost.dll 是的,但我还是没明白。 Microsoft.AspNet.WebApi.WebHost 包安装了吗?

以上是关于500 内部:找到多个与请求匹配的操作的主要内容,如果未能解决你的问题,请参考以下文章

在 Web Api 中找到多个与请求匹配的操作

Web API 路由 - 找到与请求匹配的多个操作

Laravel 护照 500 内部服务器错误

使用 PHP 时发布请求有效,但是当我将 Axios 与 React 一起使用时,它会失败并出现 500 内部错误,我该如何解决?

IIS 500 – 内部服务器错误解决方案

Laravel:为啥我的 ajax 请求返回“500(内部服务器错误)”?