程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ASP.NET Web API中的自定义方法名称大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决ASP.NET Web API中的自定义方法名称?

开发过程中遇到ASP.NET Web API中的自定义方法名称的问题如何解决?下面主要结合日常开发的经验,给出你关于ASP.NET Web API中的自定义方法名称的解决方法建议,希望对你解决ASP.NET Web API中的自定义方法名称有所启发或帮助;

默认情况下,路由配置遵循RESTFul约定,这意味着它将仅接受Get,Post,Put和delete操作名称(默认情况下,请查看global.asax =>中的路由,不允许您指定任何操作名称=>它使用http动词进行分派)。因此,当您向GET请求发送消息时,/API/users/authenticate您基本上是在调用该Get(int ID)操作并传递ID=authenticate,这显然会崩溃,因为您的Get操作需要一个整数。

如果您希望使用与标准名称不同的动作名称,则可以在global.asax以下位置修改路径定义:

Routes.MaphttpRoute(
    name: "DefaultAPI",
    routeTemplate: "API/{Controller}/{action}/{ID}",
    defaults: new { action = "get", ID = RouteParameter.optional }
);

现在,您可以导航到/API/values/getauthenticate以验证用户身份。

解决方法

我正在从WCF Web API转换为新的ASP.NET MVC 4 Web
API。我有一个UsersController,我想有一个名为Authenticate的方法。我看到了有关如何执行GetAll,GetOne,Post和delete的示例,但是如果我想在这些服务中添加其他方法怎么办?例如,我的Usersservice应该有一个称为Authenticate的方法,他们在其中传递用户名和密码,但这是行不通的。

public class UsersController : BaseApiController
{
    public String GetAll()
    {
        return "getall!";
    }

    public String Get(int id)
    {
        return "get 1! " + id;
    }

    public User GetAuthenticate(String userName,String password,String applicationName)
    {
        LogWriter.Write(String.Format("Received authenticate request for username {0} and password {1} and application {2}",userName,password,applicationName));

        //check if valid leapfrog login.
        var decodedUsername = userName.replace("%40","@");
        var encodedpassword = password.Length > 0 ? Utility.HashString(password) : String.Empty;
        var leapFrogUsers = LeapFrogUserData.FindAll(decodedUsername,encodedpassword);

        if (leapFrogUsers.Count > 0)
        {
            return new User
            {
                Id = (uint)leapFrogUsers[0].Id,Guid = leapFrogUsers[0].Guid
            };
        }
        else
            throw new httpResponseException("Invalid login credentials");
    }
}

我可以浏览到myapi / api / users /,它将调用GetAll,我可以浏览到myapi / api / users /
1,并且它将调用Get,但是,如果我调用myapi / api / users / authenticate?username = {0}
password = {1},然后它将调用Get(不进行身份验证)并报错:

如何调用自定义方法名称,例如Authenticate?

大佬总结

以上是大佬教程为你收集整理的ASP.NET Web API中的自定义方法名称全部内容,希望文章能够帮你解决ASP.NET Web API中的自定义方法名称所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。