asp.net route有什么问题

时间:2016-07-18 13:57:48

标签: asp.net angularjs asp.net-mvc

这是来自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();
    }

有人可以告诉我为什么采用输入字符串的方法不起作用吗?

谢谢!

1 个答案:

答案 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);
                }
            }
        }
    }
}