这是来自asp.net 5 / mvc 6.我有两个控制器方法,每个接受一个参数,每个都返回一个字符串。一种方法采用字符串参数,另一种方法采用简单对象。采用字符串参数的方法不起作用(传入参数的值始终为null)。传入简单对象的调用确实有效。我正在使用$ http服务从角度控制器内部调用这些方法。我必须做一些非常简单的错误,但我没有看到它。
以下是控制器类的代码:
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpPost("PostWithStringParam")]
public string PostWithStringParam([FromBody] string val)
{
return val ?? "<null>";
}
[HttpPost("PostWithInputparam")]
public string PostWithInputParam([FromBody] TestInputClass val)
{
string ret = "<null>";
if (val != null)
{
ret = $"First Name: {val.Name}, City: {val.City}";
}
return ret;
}
}
以下是角度控制器的相关代码。请注意,“go”功能连接到按钮上的ng-click。
vm.inputObject = {
name: "George",
city: "Chicago"
}
vm.inputString = "some data";
var callApi = function(url, data) {
$http({
method: "POST",
url: url,
data: data
}).then(
function (result) {
alert(result.data);
},
function (error) {
alert(error.status);
}
);
}
var callStringApi = function() {
var url = "api/values/PostWithStringParam";
callApi(url, vm.inputString);
}
var callObjectApi = function () {
var url = "api/values/PostWithInputParam";
callApi(url, vm.inputObject);
}
vm.go = function() {
callStringApi();
callObjectApi();
}
有人可以告诉我为什么采用输入字符串的方法不起作用吗?
谢谢!
答案 0 :(得分:1)
您需要查看数据并在发送数据时将contentType指定为application / json。默认的模型绑定器将能够映射发布的数据。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
namespace NameSpace
{
public class Global : System.Web.HttpApplication
{
private void mapearUrlAmigaveis()
{
String url = Request.Path.ToString().ToLower();
int positionQuestionMarkParameter = url.IndexOf('?');
String urlSemParametros = (positionQuestionMarkParameter != -1) ? url.Substring(0, (positionQuestionMarkParameter - 1)) : url;
String[] splitBarra = urlSemParametros.Split('/');
int indexOfUltimaBarra = urlSemParametros.LastIndexOf('/');
if (splitBarra.Length > 0)
{
String ultimaBarra = splitBarra[(splitBarra.Length - 1)];
String caminhoLocalUltimaBarra = Request.PhysicalApplicationPath + ultimaBarra;
String parametros = ((positionQuestionMarkParameter != -1) ? url.Substring((positionQuestionMarkParameter - 1), (url.Length - 1)) : String.Empty);
if (System.IO.File.Exists(caminhoLocalUltimaBarra + ".aspx"))
{
Context.RewritePath(urlSemParametros + ".aspx" + parametros);
}
else if (System.IO.File.Exists(caminhoLocalUltimaBarra + ".ashx"))
{
Context.RewritePath(urlSemParametros + ".ashx" + parametros);
}
}
}
}
}