我正在尝试搜索我的Web API网址,如下所示:
http://localhost:8000/api/trips/World Trip/stops
在这种情况下,“世界之旅”就是这个词。但是当呼叫到达服务器时,它按如下方式到达:
“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");
}
}
}
}
答案 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博客更新所有内容,然后再次测试。祝你好运,我很想知道结果如何。