Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 非REST服务的Web API路由_Asp.net_Asp.net Web Api - Fatal编程技术网

Asp.net 非REST服务的Web API路由

Asp.net 非REST服务的Web API路由,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我正在设计一个与REST无关的Web服务。它备份单页应用程序,目前必须实现三种简单方法: public class ImportController : ApiController { [HttpPost] public string[] Parse(string source) { ... } [HttpPost] public ConvertResponse Convert(ConvertRequest request) { ... } [Http

我正在设计一个与REST无关的Web服务。它备份单页应用程序,目前必须实现三种简单方法:

public class ImportController : ApiController
{
    [HttpPost]
    public string[] Parse(string source) { ... }

    [HttpPost]
    public ConvertResponse Convert(ConvertRequest request) { ... }

    [HttpGet]
    public object GetHeaders() { ... }
}
当我使用Controller时,它工作得非常好,除了一件事:我需要将所有返回的JSON数据转换为camelCase。我在web上找到了一个非常合理的解决方案,它使用了CamelCasePropertyNamesContractResolver,但它只适用于WebApi控制器,因为返回JsonResult的MVC控制器总是使用JavascriptSerializer,而忽略此配置

当我将基类切换到ApiController时,路由中断:GetHeaders工作,但其他方法返回404错误

我的路线配置如下:

routes.MapHttpRoute(
    name: "ImportParse",
    routeTemplate: "import/{action}",
    defaults: new { controller = "Import" }
);
成功的请求AngularJS:

var baseUrl = 'http://localhost:3821/';
$http.get(baseUrl + 'import/getHeaders').success( ... );
未成功的请求:

$http.post(baseUrl + 'import/parse', { source: 'test' }).success( ... );
错误:

message: "No HTTP resource was found that matches the request URI 'http://localhost:3821/import/parse'."
messageDetail: "No action was found on the controller 'Import' that matches the request."

如何为这些方法定义正确的路由规则?

很可能Web Api正在寻找支持HttpPost并具有对象参数的解析操作。因为您发布的是对象,而不是字符串,所以得到的是404

要解决此问题,请尝试发送:

$http.postbaseUrl+'import/parse','test'。成功

谢谢!我添加了一个带有Source字段的ParseRequest,现在可以正常工作了。非常感谢。