Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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
C# DNN WebAPI POST始终返回404未找到错误_C#_Asp.net_Ajax_Dotnetnuke_Asp.net Web Api - Fatal编程技术网

C# DNN WebAPI POST始终返回404未找到错误

C# DNN WebAPI POST始终返回404未找到错误,c#,asp.net,ajax,dotnetnuke,asp.net-web-api,C#,Asp.net,Ajax,Dotnetnuke,Asp.net Web Api,当我尝试在DNN中使用WebAPI方法进行服务时,GET请求没有问题。然而,在我的一生中,除了HTTP 404 Not Found错误之外,我无法获得返回任何内容的POST请求。GET和POST方法都在同一个控制器中 我审查了类似的问题,并确认我的文件夹名称是标准的,IIS没有运行应用程序文件夹,并且我没有额外的web.config 我还安装了dnnGlimpse,并验证我的路线已注册 这是DNN 7.3.4和一个干净的项目-它不是来自VS模板 这是我的路线映射器的一个示例 public cla

当我尝试在DNN中使用WebAPI方法进行服务时,GET请求没有问题。然而,在我的一生中,除了HTTP 404 Not Found错误之外,我无法获得返回任何内容的POST请求。GET和POST方法都在同一个控制器中

我审查了类似的问题,并确认我的文件夹名称是标准的,IIS没有运行应用程序文件夹,并且我没有额外的web.config

我还安装了dnnGlimpse,并验证我的路线已注册

这是DNN 7.3.4和一个干净的项目-它不是来自VS模板

这是我的路线映射器的一个示例

public class RouteMapper : IServiceRouteMapper
{
    public void RegisterRoutes(IMapRoute mapRouteManager)
    {
        mapRouteManager.MapHttpRoute("MyModule", "default", "{controller}/{action}", new[] { "MyCompany.Modules.MyModule.Controllers" });
    }
}
这是我的post方法的一个例子。在这个方法中,我甚至不能在任何地方命中断点。此类位于名为“控制器”的文件夹中

下面是一个我如何称呼它的例子

var sf = $.ServicesFramework(<%=ModuleId %>);
var serviceUrl = sf.getServiceRoot('MyModule');

function getObjectType() {
    var strNumber = $('<%=txtNumber.ClientID %>').val();

    try
    {
        $.ajax({
            type: "POST",
            cache: false,
            url: serviceUrl + "Example/CustomObjectType",
            beforeSend: sf.setModuleHeaders,
            data: strNumber
        }).success(function(data, textStatus, jqXHR) {
            alert(data);
        }).fail(function (xhr, result, status) {
            alert("Uh-oh, something broke: " + status);
        });
    } catch (e) {
        //Shouldn't do this but it's just for testing
        alert(e.stack);
    }
}
var sf=$.ServicesFramework();
var serviceUrl=sf.getServiceRoot('MyModule');
函数getObjectType(){
var strNumber=$('').val();
尝试
{
$.ajax({
类型:“POST”,
cache:false,
url:serviceUrl+“示例/CustomObjectType”,
发送前:sf.setModuleHeaders,
数据:strNumber
}).success(函数(数据、文本状态、jqXHR){
警报(数据);
}).失败(功能(xhr、结果、状态){
警惕(“哦,有东西坏了:+状态);
});
}捕获(e){
//不应该这样做,但只是为了测试
警报(如堆栈);
}
}

事实上,WebAPI不喜欢在POST中使用简单的值,这就是问题所在。一旦我将其更改为期望视图模型,就会找到该方法

答案如下:

var sf = $.ServicesFramework(<%=ModuleId %>);
var serviceUrl = sf.getServiceRoot('MyModule');

function getObjectType() {
    var strNumber = $('<%=txtNumber.ClientID %>').val();

    try
    {
        $.ajax({
            type: "POST",
            cache: false,
            url: serviceUrl + "Example/CustomObjectType",
            beforeSend: sf.setModuleHeaders,
            data: strNumber
        }).success(function(data, textStatus, jqXHR) {
            alert(data);
        }).fail(function (xhr, result, status) {
            alert("Uh-oh, something broke: " + status);
        });
    } catch (e) {
        //Shouldn't do this but it's just for testing
        alert(e.stack);
    }
}