根据我的收集,有三类:
GET和使用POSTPOST和使用GET假设这三个案件我是否正确?如果是这样,每个案例的一些例子是什么?
我有一个项目,要求我的URL在路径中有点.例如,我可能有一个URL,例如www.example.com/people/michael.phelps
带点的网址生成404.我的路由很好.如果我通过michaelphelps,没有圆点,那么一切正常.如果我添加点我得到404错误.示例站点在带有IIS8 Express的Windows 7上运行.URLScan未运行.
我尝试将以下内容添加到我的web.config中:
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有什么区别.我刚收到404.0 Not Found错误.
这是一个MVC4项目,但我不认为这是相关的.我的路由工作正常,我期望的参数在那里,直到它们包含一个点.
我需要配置什么才能在网址中加点?
我们公司正在为我们的产品开发API,我们正在考虑使用ASP.NET MVC.在设计我们的API时,我们决定使用下面的调用来让用户以XML格式从API请求信息:
如您所见,传递了多个参数(即artist和api_key).在ASP.NET MVC,artist将是controller,getImages在行动,但我会如何将多个参数传递给动作?
这甚至可以使用上面的格式吗?
我想知道是什么意思
<modules runAllManagedModulesForAllRequests="true" />
Run Code Online (Sandbox Code Playgroud)
我使用的是IIS 7.5,我有一个简单的Web应用程序.我是否需要在web.config文件中编写此代码.我还为jquery ajax调用编写了几个http处理程序.我正在使用表单身份验证和asp.net 4.0.
如何确定我必须运行哪个模块以及哪个模块不运行?
我正在使用Web API 2,当我在本地方框上使用IIS 7.5向我的API方法发送POST时,我收到以下错误.
The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'string'.
Line 21: GlobalConfiguration.Configuration.EnsureInitialized();
Run Code Online (Sandbox Code Playgroud)
我的API都不能使用IIS.但是,我能够使用IIS Express在Visual Studio中运行我的API项目并成功对我的登录API进行POST,但是当我尝试向另一个API调用发出GET请求时,我得到约束解析器错误.
为了解决这个问题,我在Visual Studio中创建了一个全新的Web API 2项目,并开始一次一个地将现有API导入到新项目中并运行它们以确保它们正常工作.在这个新项目中使用IIS Express,我得到了与现有API项目相同的结果.
我在这里错过了什么?即使有一个全新的项目,我也无法在没有遇到这个约束解析器问题的情况下发出GET请求.
所以我一直在尝试将http模块映射到MVC3站点的子路径.它应该很简单,因为我理解它,但它没有工作.模块设置如下:
<handlers>
<add name="Nancy" path="api/*" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" allowPathInfo="true" />
</handlers>
Run Code Online (Sandbox Code Playgroud)
iis6也有匹配部分,所以我可以在webdev.webserver下运行它.然而,测试部署到我的本地iis7(在Win7下)和webdev.webserver,只有/ api实际上调用处理程序.如果我调用/ api/{anything}它只返回404.
我确定我只是"做错了(tm)",但任何帮助都会受到赞赏.
注意:我还尝试了其他一些配置,包括使用标记和创建/ api文件夹,并使用完整的通配符将web.config添加到该文件夹.
我有一个MVC.NET应用程序,其中一个路由如下:
routes.MapRoute("member", "member/{id}/{*name}", new { controller = "member", action = "Details", id = "" }, new { id = @"\d+" });
因此,链接可以是这样的:http:// domain/member/123/any_kind_of_username
这通常工作正常,但如果路径包含非法字符(例如双qoute:http:// domain/member/123/my_ "user"_name),我会收到"System.ArgumentException:路径中的非法字符".
经过大量谷歌搜索后,最好的建议似乎是确保网址不包含任何此类字符.不幸的是,在这种情况下,这是我无法控制的.
有办法解决这个问题吗?
我正在从原始的http处理程序移动API项目,我在路径中使用句点:
http://server/collection/id.format
Run Code Online (Sandbox Code Playgroud)
我想在Web Api(自托管)版本中遵循相同的URL架构,并尝试这样做:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}.{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎没有解决(在/ foo,/ foo/bar和/foo/bar.txt上一致的404').在'format'之前使用斜杠的类似模式工作正常:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}/{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
Run Code Online (Sandbox Code Playgroud)
我还没有深入研究Web Api的代码,在此之前我想过我会在这里询问这是否是Web Api中已知的,甚至是合理的限制.
更新:我忽略了提到"id"和"format"是字符串,这对于解决这个问题很重要.添加约束以从"id"标记中排除句点可解决404问题.
我有一个WebAPI动作,如下所示:
[Route("api/values/{id}")]
public async Task<HttpResponseMessage> Delete(string id, DateTimeOffset date) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是当我从一个HttpClient实例调用它时,创建一个如下的URL:
string.Format("http://localhost:1234/api/values/1?date={0}", System.Net.WebUtility.UrlEncode(DateTimeOffset.Now.ToString()));
// -> "http://localhost:1234/api/values/1?date=17%2F02%2F2015+7%3A18%3A39+AM+%2B11%3A00"
Run Code Online (Sandbox Code Playgroud)
我得到一个400回复,说date不可存在的参数不存在.
我也尝试将该[FromUri]属性添加到参数中,但它仍然没有映射.如果我将其更改为DateTimeOffset?我可以看到它保留为null并且查看Request.RequestUri.Query值是否存在,只是没有映射.
最后,我尝试不做一个WebUtility.UrlEncode,它没有任何不同.
我想使用HTTP PUT动词公开ASP.Net Web Api 2动作来上传文件.这与我们的REST模型一致,因为API代表一个远程文件系统(类似于WebDAV,但实际上是简化的),因此客户端选择资源名称(因此PUT是理想的,POST不是一个合理的选择).
Web Api文档描述了如何使用multipart/form-data表单上载文件,但没有描述如何使用PUT方法进行上传.
您将使用什么来测试这样的API(HTML多部分表单不允许PUT动词)?服务器实现是否类似于web api文档中描述的多部分实现(使用MultipartStreamProvider),或者应该如下所示:
[HttpPut]
public async Task<HttpResponseMessage> PutFile(string resourcePath)
{
Stream fileContent = await this.Request.Content.ReadAsStreamAsync();
bool isNew = await this._storageManager.UploadFile(resourcePath, fileContent);
if (isNew)
{
return this.Request.CreateResponse(HttpStatusCode.Created);
}
else
{
return this.Request.CreateResponse(HttpStatusCode.OK);
}
}
Run Code Online (Sandbox Code Playgroud) 我在Servlet中使用此代码,该Servlet设置内联PDF文档的文件名:
response.setContentType("application/pdf");
response.setContentLength((int) file.length());
response.setHeader("Content-disposition", "inline; filename=\"" + file.getName() + "\"");
Run Code Online (Sandbox Code Playgroud)
但是这在IE 9中不起作用:"另存为..."对话框仅显示URL的最后一个路径部分,后跟".pdf"(对于"/ some/url/invoice",它是"invoice.pdf" )
这是一个已知的错误?有解决方法吗?
我运行MVC 5,并有一个搜索API产生以下链接:/SearchedItem.?format=json这里SearchedItem.是用户输入的搜索.由于一个dot角色,这显然会导致着名的404 .我已经研究了以下所有解决方案:
点字符'.' 在MVC Web API 2中请求诸如api/people/STAFF.45287之类的请求
然而,无论是加斜杠(尝试都/SearchedItem./?format=json和/SearchedItem.?format=json/),也不RAMMFAR工作.
寻找任何新的建议.
asp.net-mvc ×5
c# ×5
asp.net ×3
.net ×2
api ×2
iis ×2
iis-7 ×2
routing ×2
file-upload ×1
http ×1
http-get ×1
http-headers ×1
http-post ×1
httphandler ×1
iis-8 ×1
iis-express ×1
nancy ×1
servlets ×1
url ×1
web-config ×1