C#MVC API使用GET queryString发送值?

时间:2013-10-19 11:37:38

标签: api asp.net-mvc-4 get query-string

这是我第一次尝试使用MVC4制作API。到目前为止它工作正常。 对于练习,我想尝试使用GET方法中的queryString而不是当前的POST发送方法发送我的模型。

由于我不知道如何开始,需要做什么?你能提出一些意见吗?

我可以按原样查看索引视图吗?还是需要改变什么?

我还想保留我必须显示列表的当前GET方法,我想如果我添加一个新的GET方法来发送查询字符串会干扰吗?

所有建议在这里都很有用^ _ ^

namespace MessageHandler.Models
{
    public class Message
    {
        public int Id { get; set; }
        public double Amount { get; set; }
        public string PaymentMessage { get; set; }
        public string Name { get; set; }
        public string Adress { get; set; }
    }
}





namespace MessageHandler.Services
{
    public class MessageRepository
    {
        private const string CacheKey = "MessageStore";

        public MessageRepository()
        {
            var ctx = HttpContext.Current;
            if (ctx != null)
            {
                if (ctx.Cache[CacheKey] == null)
                {
                    var messages = new Message[]
                    {
                        new Message
                        {
                            Id = 1, PaymentMessage = "payment for order 23434", 
                            Name = "Christer Glenning", Adress = "Grenvagen 24",
                            Amount = 2300
                        },
                        new Message
                        {
                            Id = 2, PaymentMessage = "payment for order 24354",
                            Name = "Carl Ingemar", Adress = "Regnbagen 446",
                            Amount = 44
                        }
                    };
                    ctx.Cache[CacheKey] = messages;
                }
            }
        }

        public Message[] GetAllMessages()
        {
            var ctx = HttpContext.Current;

            if (ctx != null)
            {
                return (Message[])ctx.Cache[CacheKey];
            }

            return new Message[]
            {
                new Message
                {
                    Id = 0,
                    Name = "placeHolder"
                }
            };
        }

        public bool SaveMessage(Message message)
        {
            var ctx = HttpContext.Current;

            if (ctx != null)
            {
                try
                {
                    var currentData = ((Message[])ctx.Cache[CacheKey]).ToList();
                    currentData.Add(message);
                    ctx.Cache[CacheKey] = currentData.ToArray();

                    return true;
                }
                catch (Exception exp)
                {
                    Console.WriteLine(exp.Message);

                    return false;
                }
            }
            return false;
        }

    }
}






using MessageHandler.Models;
using MessageHandler.Services;

namespace MessageHandler.Controllers
{
    public class MessageController : ApiController
    {
        private MessageRepository repo;

        public MessageController()
        {
            this.repo = new MessageRepository();
        }

        public Message[] Get()
        {
            return repo.GetAllMessages();
        }

        public HttpResponseMessage Post(Message message)
        {
            this.repo.SaveMessage(message);

            var response = Request.CreateResponse<Message>(System.
                            Net.HttpStatusCode.Created, message);

            return response;
        }
    }
}





<header>
    <div class="content-wrapper">
        <div class="float-left">
            <p class="site-title">
                <a href="~/">API</a></p>
        </div>
    </div>
</header>
<div id="body">
    <ul id="messages"></ul> 

    <form id="saveMessageForm" method="post">
        <h3>Create a new Message</h3>
        <p>
            <label for="messageId">Id:</label>
            <input type="text" name="Id" />
        </p>

        <p>
            <label for="messagePaymentMessage">Message:</label>
            <input type="text" name="PaymentMessage" />
        </p>

        <p>
            <label for="messageName">Name:</label>
            <input type="text" name="Name" />
        </p>

        <p>
            <label for="messageAdress">Adress:</label>
            <input type="text" name="Adress" />
        </p>

        <p>
            <label for="messageAmount">Amount:</label>
            <input type="text" name="Amount" />
        </p>
                <input type="button" id="saveMessage" value="Save" />
    </form>   
</div>

@section scripts
{
<script type="text/javascript">
    $(function()
    {
        $.getJSON('/api/message', function (messagesJsonPayload) {
            $(messagesJsonPayload).each(function (i, item) {
                $('#messages').append('<li>' + item.PaymentMessage + '</li>' +
                                      '<li>' + item.Name + '</li>' +
                                      '<li>' + item.Adress + '</li>' +
                                      '<li>' + '$' + item.Amount.toFixed(2) + '</li>' + '<br>');
            });
        });
    });
</script>

<script type="text/javascript">

    $('#saveMessage').click(function()
    {
        $.post("api/message",
              $("#saveMessageForm").serialize(),
              function(value)
              {
                  $('#messages').append('<li>' + value.PaymentMessage + '</li>' +
                                        '<li>' + value.Name + '</li>' +
                                        '<li>' + value.Adress + '</li>' +
                                        '<li>' + '$' + value.Amount.toFixed(2) + '</li>');
              },
              "json"
        );
    });
</script>
}

1 个答案:

答案 0 :(得分:0)

嗯,我不是构建API的专家,但我认为你需要退一步学习构建API的概念(特别是REST)。

这是可能对您有用的链接:

build-restful-apis-with-aspnet-web-api

REST API Tutorial