标签: asp.net-web-api

找到了与Web Api中的请求匹配的多个操作

当我尝试使用2个"Get"方法时,我不断收到此错误

找到了与请求匹配的多个操作:webapi

我一直在寻找关于堆栈的其他类似问题,但我没有得到它.

我有2个不同的名称,并使用"HttpGet"属性

[HttpGet]
public HttpResponseMessage Summary(MyVm vm)
{
    return null;
}

[HttpGet]
public HttpResponseMessage FullDetails()
{
    return null;
}
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-web-api asp.net-web-api-routing

229
推荐指数
7
解决办法
18万
查看次数

HttpClient不支持PostAsJsonAsync方法C#

我试图从我的web应用程序调用web api.使用.net 4.5并在编写代码时我收到错误HttpClient不包含定义PostAsJsonAsync方法

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:51093/");
client.DefaultRequestHeaders.Accept.Add(
   new MediaTypeWithQualityHeaderValue("application/json"));
var user = new Users();
user.AgentCode = 100;
user.Remarks = "Test";
user.CollectionDate = System.DateTime.Today;
user.RemittanceDate = System.DateTime.Today;
user.TotalAmount = 1000;
user.OrgBranchID = 101;

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:51093/");
client.DefaultRequestHeaders.Accept.Add(
   new MediaTypeWithQualityHeaderValue("application/json"));
var user = new Users();
user.AgentCode = 100;
user.Remarks = "Test";
user.CollectionDate = System.DateTime.Today;
user.RemittanceDate = System.DateTime.Today;
user.TotalAmount = 1000;
user.OrgBranchID = 101;

var …
Run Code Online (Sandbox Code Playgroud)

c# json asp.net-web-api dotnet-httpclient

223
推荐指数
9
解决办法
21万
查看次数

如何在HttpClient的HttpRequestMessage上设置cookie

我正在尝试使用web api HttpClient对端点进行发布,该端点需要以标识帐户的HTTP cookie的形式登录(这只是#ifdef发布版本之外的内容).

如何添加cookie HttpRequestMessage

c# rest asp.net-mvc-4 asp.net-web-api

218
推荐指数
5
解决办法
16万
查看次数

从Web Api控制器返回http状态代码

我正在尝试在web api控制器中返回未针对GET方法修改的304的状态代码.

我成功的唯一方法是这样的:

public class TryController : ApiController
{
    public User GetUser(int userId, DateTime lastModifiedAtClient)
    {
        var user = new DataEntities().Users.First(p => p.Id == userId);
        if (user.LastModified <= lastModifiedAtClient)
        {
             throw new HttpResponseException(HttpStatusCode.NotModified);
        }
        return user;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是它不是一个例外,它只是没有修改,所以客户端缓存是好的.我还希望返回类型是User(因为所有web api示例都显示为GET)不返回HttpResponseMessage或类似的东西.

c# httpresponse http-status-codes asp.net-web-api

213
推荐指数
9
解决办法
25万
查看次数

ASP.NET Web API中的可选查询字符串参数

我需要实现以下WebAPI方法:

/api/books?author=XXX&title=XXX&isbn=XXX&somethingelse=XXX&date=XXX
Run Code Online (Sandbox Code Playgroud)

所有查询字符串参数都可以为null.也就是说,调用者可以指定从0到所有5个参数.

MVC4 beta中我曾经做过以下事情:

public class BooksController : ApiController
{
    // GET /api/books?author=tolk&title=lord&isbn=91&somethingelse=ABC&date=1970-01-01
    public string GetFindBooks(string author, string title, string isbn, string somethingelse, DateTime? date) 
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

MVC4 RC不再像这样了.如果我指定少于5个参数,它会回复404一句话:

未在与请求匹配的控制器"Books"上找到任何操作.

什么是正确的方法签名,使其行为像以前一样,而不必在URL路由中指定可选参数?

c# url query-string asp.net-web-api

200
推荐指数
3
解决办法
21万
查看次数

HTTP错误500.19和错误代码:0x80070021

我有一个由Visual Studio 2013构建的简单webAPI.当我从VS13运行它时效果很好但是当我在本地IIS中复制项目时它会给我以下错误.

HTTP错误500.19 - 内部服务器错误无法访问请求的页面,因为页面的相关配置数据无效.

详细错误信息:

模块 IIS Web核心

通知 BeginRequest

处理程序 尚未确定

错误代码 0x80070021

配置错误 此配置部分不能在此路径中使用.当该部分被锁定在父级别时会发生这种情况.锁定是默认情况下(overrideModeDefault ="Deny"),或由locationMode ="Deny"或遗留allowOverride ="false"的位置标记显式设置.

配置文件 \?\ C:\ inetpub\wwwroot\APITeslin\web.config

配置来源:

36:   <system.webServer>  
37:     <handlers>  
38:       <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
Run Code Online (Sandbox Code Playgroud)

iis asp.net-mvc asp.net-web-api iis-8 asp.net-mvc-5

199
推荐指数
9
解决办法
31万
查看次数

Post参数始终为null

自从升级到RC for WebAPI后,我在WebAPI上调用POST时遇到了一些奇怪的问题.我甚至回到了新项目生成的基本版本.所以:

public void Post(string value)
{
}
Run Code Online (Sandbox Code Playgroud)

并从Fiddler打来电话:

Header:
User-Agent: Fiddler
Host: localhost:60725
Content-Type: application/json
Content-Length: 29

Body:
{
    "value": "test"
}
Run Code Online (Sandbox Code Playgroud)

当我调试时,字符串"value"永远不会被分配给.它总是为NULL.谁有这个问题?

(我第一次看到更复杂类型的问题)

问题不仅仅是绑定到ASP.NET MVC 4,在安装RC后,新的ASP.NET MVC 3项目也会出现同样的问题

.net c# asp.net-web-api asp.net-web-api-routing

195
推荐指数
11
解决办法
31万
查看次数

通过隧道(使用ngrok)将localhost暴露给互联网:HTTP错误400:错误的请求; 无效的主机名

从以前版本的问题,有这样的:浏览网站的IP地址而不是localhost,这几乎概括了我到目前为止所做的事情......我已经有了本地IP工作.然后我找到了ngrok,显然我不需要通过IP连接.


我想要做的是将我在localhost上运行的网站暴露给互联网.我找到了一个可以做到这一点的工具:ngrok.

在visual studio中运行该网站,该网站在localhost/port#上启动.我在命令行中运行命令"ngrok http port#".一切似乎都很好.我生成了几个URL,并且ngrok检查URL(localhost:4040)可以工作.

唯一的问题是,当我转到生成的URL时,我收到一个HTTP错误400:错误的请求无效的主机名.这是一个不同的错误,当我运行"ngrok http wrongport#",这是一个主机未找到错误...所以我觉得好事正在发生.我只是不知道是什么......

在通过隧道服务将我的网站暴露给互联网时,我是否缺少一个步骤?如果有,我在ngrok文档中找不到它.

asp.net iis-express asp.net-web-api visual-studio-2012 ngrok

186
推荐指数
5
解决办法
6万
查看次数

从2012年到2013年更新后无法加载文件或程序集'System.Web.Http 4.0.0

我按照升级进行了升级. http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and- Web的API-2

我收到了错误.有没有其他人得到这个错误?

'/'应用程序中的服务器错误.

无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(来自HRESULT的异常:0x80131040)
描述:在执行当前Web请求期间发生了未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.IO.FileLoadException:无法加载文件或程序集"System.Web.Http,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35"或它的一个依赖.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

来源错误:

第48行:第49行:第50行:}第51行:第52行:protected void Application_BeginRequest(object sender,EventArgs e)

源文件:d:\ SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs行:50

程序集加载跟踪:下列信息有助于确定程序集"System.Web.Http,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35"无法加载.

===预绑定状态信息===日志:DisplayName = System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35(完全指定)LOG:Appbase = file:/// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/日志:初始PrivatePath = D:\ SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\bin调用程序集:ThirdPartyWebAPI,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null.===日志:此绑定在默认加载上下文中启动.日志:使用应用程序配置文件:D:\ SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\web.config日志:使用主机配置文件:C:\ Users\michalc\Documents\IISExpress\config\aspnet.config日志:使用机器配置来自C:\ Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config的文件.日志:后策略引用:System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http.DLL.日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http .DLL.日志:尝试下载新的URL文件:/// D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL.警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集的设置(hr = 0x80131040).探测终止.试图下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http.DLL .日志:尝试下载新的URL文件:/// D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL.警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集的设置(hr = 0x80131040).探测终止.试图下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http.DLL .日志:尝试下载新的URL文件:/// D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL.警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集的设置(hr …

c# odata asp.net-web-api visual-studio-2013

179
推荐指数
6
解决办法
35万
查看次数

使用IHttpActionResult返回内容以获得非OK响应

对于从Web API 2控制器返回,如果响应正常(状态200),我可以返回带有响应的内容,如下所示:

    public IHttpActionResult Get()
    {
        string myResult = ...
        return Ok(myResult);
    }
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想在可能的情况下使用内置的结果类型:https://msdn.microsoft.com/en-us/library/system.web.http.results(v = vs.118).aspx

我的问题是,对于另一种类型的响应(不是200),如何用它返回消息(字符串)?例如,我可以这样做:

    public IHttpActionResult Get()
    {
       return InternalServerError();
    }
Run Code Online (Sandbox Code Playgroud)

但不是这个:

    public IHttpActionResult Get()
    {
       return InternalServerError("Message describing the error here");
    }
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望将其推广,以便我可以使用IHttpActionResult的任何实现发回消息.

我是否需要这样做(并构建我自己的响应消息):

    public IHttpActionResult Get()
    {
       HttpResponseMessage responseMessage = ...
       return ResponseMessage(responseMessage);
    }
Run Code Online (Sandbox Code Playgroud)

或者,还有更好的方法?

c# httpresponse asp.net-web-api

177
推荐指数
8
解决办法
21万
查看次数