MVC 6 - 参数URL上的Web API 2.0空白区域

时间:2015-11-22 02:03:34

标签: c# asp.net-core asp.net-core-mvc

我正在尝试搜索我的Web API网址,如下所示:

http://localhost:8000/api/trips/World Trip/stops

在这种情况下,“世界之旅”就是这个词。但是当呼叫到达服务器时,它按如下方式到达:

enter image description here

World%20Trip”代码%20替换空格!

是否需要进行一些设置以防止用代码替换空格?我记得以前版本中的<httpRuntime relaxedUrlToFileSystemMapping="true" />

我不想在服务器中使用任何转换方法:例如HttpServerUtility.UrlEncode()

我的数据注释路线:

[Route("api/trips/{tripName}/stops")]

我的StopController.cs

using AutoMapper;
using Microsoft.AspNet.Mvc;
using Microsoft.Framework.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using TheWorld.Models;
using TheWorld.ViewModels;

namespace TheWorld.Controllers.Api
{
    [Route("api/trips/{tripName}/stops")]

    public class StopController : Controller
    {
        private ILogger<StopController> _logger;
        private IWorldRepository _repository;

        public StopController(IWorldRepository repository, ILogger<StopController> logger)
        {
            _repository = repository;
            _logger = logger;
        }

        [HttpGet("")]
        public JsonResult Get(string tripName)
        {
            try
            {
                var results = _repository.GetTripByName(tripName);

                if (results == null)
                {
                    return Json(null);
                }

                return Json(Mapper.Map<IEnumerable<StopViewModel>>(results.Stops.OrderBy(s => s.Order)));
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to get stops for trip {tripName}", ex);
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return Json("Error occurred finding trip name");
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您只需使用HttpUtility.UrlDecode(yourstring)即可获得更安全的应用程序。

答案 1 :(得分:1)

我在使用复制教程&#34;使用ASP.net 5,MVC 6,EF7和AngularJS&#34; 构建Web应用程序时遇到了同样的问题。

我使用下面的代码解决了这个问题,

tripName = WebUtility.UrlDecode(tripName);

这似乎是beta-8中的错误。升级到rc1,你的问题应该解决了。

答案 2 :(得分:1)

我同意user1919597升级所有软件包并将最新的ASP版本安装到rc1-update1(这是截至此发布日期的11/30的最新版本)。见Shawn's Blog Post to perform all the updates you will need

之后,您可以测试代码是否在URL中获取tripName,将其绕过错误消息,如下所示

return Json($"Error occurred finding trip name {tripName}");

如果代码返回错误,它将从url传递tripName字符串 - 例如:http://localhost:5151/api/trips/World%20Trip/stops将返回&#34;发现错误的行程名称为World Trip&#34;。

现在,如果您只收到错误消息而不是数据,那么其他可能正在发生......这恰好是我目前正面临的课程这一部分的问题......已经过了2天搜索没有真正的解决方案...

全部 - 全部 - 根据Shawn博客更新所有内容,然后再次测试。祝你好运,我很想知道结果如何。