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