标签: asp.net-web-api

ASP.NET Web API身份验证

我希望在使用ASP.NET Web API时从客户端应用程序验证用户身份.我观看了网站上的所有视频,并阅读了此论坛帖子.

[Authorize]正确放置属性会返回401 Unauthorized状态.但是,我需要知道如何允许用户登录API.

我想从Android应用程序向API提供用户凭据,让用户登录,然后对所有后续API调用进行预先验证.

.net authentication android asp.net-web-api

121
推荐指数
2
解决办法
4万
查看次数

有没有办法强制ASP.NET Web API返回纯文本?

我需要从ASP.NET Web API控制器以纯文本形式获得响应.

我试过做一个请求,Accept: text/plain但它似乎没有做的伎俩.此外,请求是外部的,不受我的控制.我要做的是模仿旧的ASP.NET方式:

context.Response.ContentType = "text/plain";
context.Response.Write("some text);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑,解决方案:根据Aliostad的回答,我添加了WebAPIContrib文本格式化程序,在Application_Start中初始化它:

  config.Formatters.Add(new PlainTextFormatter());
Run Code Online (Sandbox Code Playgroud)

我的控制器最终结果如下:

[HttpGet, HttpPost]
public HttpResponseMessage GetPlainText()
{
  return ControllerContext.Request.CreateResponse(HttpStatusCode.OK, "Test data", "text/plain");
}
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-web-api

120
推荐指数
5
解决办法
7万
查看次数

任何人都可以向我解释CreatedAtRoute()吗?

从Web API 2的模板,post方法总是这样:

[ResponseType(typeof(MyDTO))]
public IHttpActionResult PostmyObject(MyDTO myObject)
{
    ...
    return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
}
Run Code Online (Sandbox Code Playgroud)

我不明白这种CreatedAtRoute()方法.任何人都可以CreatedAtRoute()向我解释这个方法吗?

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

120
推荐指数
3
解决办法
4万
查看次数

如何使用ApiController返回原始字符串?

我有一个提供XML/JSON的ApiController,但我希望我的一个动作可以返回纯HTML.我尝试了下面但它仍然返回XML/JSON.

public string Get()
{
    return "<strong>test</strong>";
}
Run Code Online (Sandbox Code Playgroud)

这就是上面的回报:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">&lt;strong&gt;test&lt;/strong&gt;</string>
Run Code Online (Sandbox Code Playgroud)

有没有办法只返回纯粹的,未转义的文本,甚至没有周围的XML标签(可能是一个不同的返回类型的动作属性)?

asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

119
推荐指数
3
解决办法
6万
查看次数

如何创建ASP.NET Web API Url?

在ASP.NET MVC中,我们有@Url.Action行动.有类似的东西@Url.Api会路由到/ api/controller吗?

asp.net-mvc-4 asp.net-web-api

118
推荐指数
4
解决办法
8万
查看次数

如何实现异步操作委托方法?

一点背景资料.

我正在学习Web API堆栈,我正在尝试使用Success和ErrorCodes等参数以"Result"对象的形式封装所有数据.

然而,不同的方法会产生不同的结果和错误代码,但结果对象通常会以相同的方式实例化.

为了节省一些时间并且还要了解有关C#中的异步/等待功能的更多信息,我试图将我的web api操作的所有方法体包装在一个异步操作委托中,但是陷入了一些障碍......

鉴于以下课程:

public class Result
{
    public bool Success { get; set; }
    public List<int> ErrorCodes{ get; set; }
}

public async Task<Result> GetResultAsync()
{
    return await DoSomethingAsync<Result>(result =>
    {
        // Do something here
        result.Success = true;

        if (SomethingIsTrue)
        {
            result.ErrorCodes.Add(404);
            result.Success = false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想编写一个方法,对Result对象执行操作并返回它.通常通过同步方法

public T DoSomethingAsync<T>(Action<T> resultBody) where T : Result, new()
{
    T result = new T();
    resultBody(result);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

但是如何使用async/await将此方法转换为异步方法?

这是我尝试过的:

public async Task<T> DoSomethingAsync<T>(Action<T, Task> resultBody) …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await c#-5.0 asp.net-web-api

117
推荐指数
1
解决办法
6万
查看次数

使用Json.Net进行序列化时指定自定义DateTime格式

我正在开发一个API来使用ASP.NET Web API公开一些数据.

在其中一个API中,客户希望我们以yyyy-MM-dd格式显示日期.我不想更改全局设置(例如GlobalConfiguration.Configuration.Formatters.JsonFormatter),因为它非常特定于此客户端.我在多个客户的解决方案中进行开发.

我能想到的解决方案之一是创建一个自定义JsonConverter,然后将其放入我需要进行自定义格式化的属性

例如

class ReturnObjectA 
{
    [JsonConverter(typeof(CustomDateTimeConverter))]
    public DateTime ReturnDate { get;set;}
}
Run Code Online (Sandbox Code Playgroud)

只是想知道是否还有其他一些简单的方法.

c# datetime json.net asp.net-web-api

116
推荐指数
7
解决办法
12万
查看次数

浏览器取消请求时的ASP.NET Web API OperationCanceledException

当用户加载页面时,它会发出一个或多个ajax请求,这些请求会命中ASP.NET Web API 2控制器.如果用户导航到另一个页面,则在这些ajax请求完成之前,浏览器会取消这些请求.然后,我们的ELMAH HttpModule为每个取消的请求记录两个错误:

错误1:

System.Threading.Tasks.TaskCanceledException: A task was canceled.
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__2.MoveNext()
--- End of stack trace from previous location where exception was …
Run Code Online (Sandbox Code Playgroud)

asp.net iis task-parallel-library async-await asp.net-web-api

114
推荐指数
4
解决办法
5万
查看次数

MVC web api:请求的资源上没有"Access-Control-Allow-Origin"标头

我尝试了本文中所写的所有内容:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api,但没有任何作用.我正在尝试从webAPI2(MVC5)获取数据以使用angularJS在另一个域中使用.

我的控制器看起来像这样:

namespace tapuzWebAPI.Controllers
{
    [EnableCors(origins: "http://local.tapuz.co.il", headers: "*", methods: "*", SupportsCredentials = true)]
    [RoutePrefix("api/homepage")]
    public class HomePageController : ApiController
    {
        [HttpGet]
        [Route("GetMainItems")]
        //[ResponseType(typeof(Product))]
        public List<usp_MobileSelectTopSecondaryItemsByCategoryResult> GetMainItems()
        {


            HomePageDALcs dal = new HomePageDALcs();
            //Three product added to display the data

            //HomePagePromotedItems.Value.Add(new HomePagePromotedItem.Value.FirstOrDefault((p) => p.ID == id));


            List<usp_MobileSelectTopSecondaryItemsByCategoryResult> items = dal.MobileSelectTopSecondaryItemsByCategory(3, 5);
            return items;

        }      
    }
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc cors asp.net-web-api angularjs

114
推荐指数
6
解决办法
17万
查看次数

我可以同时包含SignalR和RESTful API吗?

我有一个使用ASP.NET开发的单页Web应用程序.我最近使用SignalR库将许多Web方法转换为基于推送的方法.这真的大大增加了页面,减少了页面上的大量服务器调用.

与此同时,我也一直在寻找RESTful ASP.NET WebAPI的一些服务器端方法,真正的美妙之处在于它允许在我开发的同时为外部应用程序创建API.核心应用程序(这对我正在做的事情很重要).

然而,在看了几篇文章和 两个问题后,似乎推送和WebAPI方法似乎是两种完全不同的客户端 - 服务器通信范例.我敢肯定我可以创建各种方法,可以通过任何协议访问,但我不确定是否有这个陷阱或如果这被认为是草率 - 也许有一个更优雅的方式来实现我的目标对于.

在某种情况下,我希望RESTful WebAPI通过SignalR集线器广播事件......相反(SignalR需要访问WebAPI)似乎不太可能,但我认为仍然可能.

有没有人这样做过?有没有人对如何进行有任何建议或提示?这里最优雅的方式是什么?

asp.net rest web-applications signalr asp.net-web-api

112
推荐指数
2
解决办法
6万
查看次数